在Autolayout完成时是否会触发iOS方法?

Ken*_*ent 13 viewdidload ios autolayout

我有一个iOS应用程序,我需要知道什么时候新的视图在屏幕上完全可见; 也就是说,当Autolayout完成计算并且视图已完成绘制时.

在视图完全可见之前,ViewDidAppear似乎很好.如果我关闭Autolayout,时间似乎与人类感知一致,但我需要在这个项目中使用Autolayout(所以这不是一个解决方案......只是一个测试).

当Autolayout完成计算时,是否有任何方法可以触发?或者视图实际可见时触发的另一种方法(因为ViewDidAppear不适用于此)?

谢谢!

Mat*_*att 16

以下内容可用于避免多次调用:

- (void) didFinishAutoLayout {

    // Do some stuff here.    

    NSLog(@"didFinishAutoLayout");
}
Run Code Online (Sandbox Code Playgroud)

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];


    [NSObject cancelPreviousPerformRequestsWithTarget:self
                                 selector:@selector(didFinishAutoLayout)
                                           object:nil];
    [self performSelector:@selector(didFinishAutoLayout) withObject:nil
               afterDelay:0];
}
Run Code Online (Sandbox Code Playgroud)

  • 我只是担心延迟。如果设备受到压力,它可能会崩溃 (2认同)

Gal*_*mon 5

我为此使用 viewDidLayoutSubviews 。苹果的文档说:“调用通知视图控制器它的视图刚刚布置了它的子视图。”

  • `...但是,调用此方法并不表明视图的子视图的各个布局已被调整。 (9认同)