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 }];
- Main.Storyboard框架未更新
- 使用AutoLayout与Storyboard(不带XIB)的UICollectionViewCell的宽度和高度可变
- 使用Autolay以编程方式居中放置UIView将使视图从超级视图中消失
- UICollectionView报纸喜欢布局
- 将5个button与Autolay进行水平alignment的最佳方法是什么?
- 如何使UITableViewCell全屏显示(允许分页)?
- iPhone的UIViewController进入状态栏
- 如何使用AutoLayout缩放相对于屏幕大小的视图的高度和位置
- 故事板中的UIScrollView不适用于iOS 8 Size Classes和Autolayout