繁体   English   中英

如何在segue动画之前强制布局?

[英]How do I force layout before segue animation?

我有一个视图控制器,可以在全屏上显示内容,包括状态栏和导航栏的后面。 那些栏可能会切换为隐藏/不隐藏,因此,控制器会不断覆盖self.view.frame,以使内容覆盖全屏(即,防止在重新出现栏时自动布局将内容稍微向下移动,移动)当它们消失时上升)。 内容是滚动视图,嵌套在其中的是可以通过滚动视图缩放的图像视图。 该控制器始终由父控制器推动,并且具有垂直封面动画。

但是,我遇到了一个问题,即首次显示时,滚动视图的框架设置不正确,因此图像最初偏离中心,并且在显示后会“跳到”其正确居中的位置动画完成,并且主线程恢复布局功能,而不是动画。 最初的问题之后,一切都会按预期进行。

如果我完全禁用动画,它将按预期工作。 我相信这与视图控制器的生命周期有关。 在viewDidLoad期间,滚动视图的帧大小不正确(默认为nib),并且只有在调用layoutSubviews之前,自动布局不会对其进行校正。 但是,我需要在此之前设置帧,因为在这段时间内演示动画已经在工作。 我也不能禁用自动布局,除非仅对这个特定的视图控制器可行。

这个问题确实困扰我,我尝试了viewDid *方法的每个变体,当我决定尝试此方法时将尝试自定义序列...

在呈现视图控制器上...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *vc = [segue destinationViewController];
    [vc.view setNeedsLayout];
    [vc.view layoutIfNeeded];
}

注意,仅调用[vc.view layoutSubviews]不会执行此处所述的任何操作,您需要使用setNeedsLayout然后再调用layoutIfNeeded。

在目标视图控制器中,使用- (void)viewDidLayoutSubviews进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM