Autolayout完成时是否会触发iOS方法?
我有一个iOS应用程序,我需要知道什么时候一个新的视图是完全可见的屏幕上; 也就是说,Autolayout完成计算后,视图已经完成绘制。
在视图完全可见之前,ViewDidAppear似乎已经开火了。 如果我closuresAutolayout,时间似乎与人类感知一致,但我需要在这个项目中使用Autolayout(所以这不是一个解决scheme…只是一个testing)。
Autolayout计算完成后有没有什么方法可以触发? 或者当视图是ACTUALLY可见时触发的另一种方法(因为ViewDidAppear不适用于此)?
谢谢!
我为此使用viewDidLayoutSubviews。 苹果的文档说:“打电话通知视图控制器,它的视图刚刚布置了子视图。”
以下可以用来避免多次呼叫:
- (void) didFinishAutoLayout { // Do some stuff here. NSLog(@"didFinishAutoLayout"); }
和
- (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didFinishAutoLayout) object:nil]; [self performSelector:@selector(didFinishAutoLayout) withObject:nil afterDelay:0]; }
在我的情况下,它改变了一个约束值后的请求布局:
self.cnsTableviewHeight.constant = 50; [self layoutIfNeeded];
稍后重写layoutSubviews方法:
- (void) layoutSubviews { //This method when auto layout engine finishes }
你也可以调用setNeedsLayout而不是layoutIfNeeded
我猜实现viewDidLayoutSubviews
是正确的方法,但我用一个animation只是在同一个方法内写入完成callback。
someConstraint.constant = 100; // the change // Animate just to make sure the constraint change is fully applied [UIView animateWithDuration:0.1f animations:^{ [self.view setNeedsLayout]; } completion:^(BOOL finished) { // Here do whatever you need to do after constraint change }];
- Autolayout,UIDynamics和animation
- 使用自动布局来设置dynamicUIView以匹配容器视图
- 移动button朝目标使用约束,没有反应?
- 如何更改表视图单元格中的textview高度约束?
- 如何在imageView上设置自动布局约束以获得更好的分辨率图像?
- 我希望两个button具有相同的宽度,并使用自动布局按比例放置在屏幕顶部的所有屏幕尺寸中。
- 出现视图后应用iOS 8 / XCode 6自动布局约束
- Interface Builder:使用“Aspect Fit”时自动为UIImageView设置宽高比?
- 如何在Interface Builder中使用自动布局创build键盘附件视图?