IOS/Autolayout:在显示的控制器关闭后更改为显示视图

Posted

技术标签:

【中文标题】IOS/Autolayout:在显示的控制器关闭后更改为显示视图【英文标题】:IOS/Autolayout: Change to Presenting View After Presented Controller Dismissed 【发布时间】:2018-01-18 19:53:56 【问题描述】:

我正在尝试让自动布局在带有滚动视图的视图控制器上正常工作。当我第一次加载视图控制器时,它并没有做我想做的事。但是,如果我启动第二个模态 VC——恰好是一个 Edit VC,然后将其关闭,而不做任何其他事情,原始 VC 会正确布局(我想要的方式)。

起初,textview 的大小不适应它的内容,而只是反映了故事板中的占位符视图。

在启动并关闭模态 VC 后,textview 会采用其内容。

据我所知,在 2ndVC 启动的过程中没有发生任何可以改变 1st 的任何事情。

我的日志显示 ViewDidLoad 在最初加载时仅由第一个 VC 调用一次。 Viewwillappear 被第一个 VC 调用两次:当它最初加载时,然后在第二个 VC 被关闭后。

当您关闭呈现的 VC 时,除了 view 之外,还有其他方法会在呈现的 VC 中触发吗?

这是 VC1 中启动第二个 VC 的代码。

  UIStoryboard *storyBoard = self.storyboard;
    IDEditListVC *editVC =
    [storyBoard instantiateViewControllerWithIdentifier:@"editlist"];
    editVC.list = _list;
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: editVC];
     [self presentModalViewController:nav animated:YES];

//这是VC1 viewWillAppear中获取文本视图高度的代码。启动和关闭 2nd VC 前后的结果变化

self.textView.text = listText;
float listHeight = self.textView.contentSize.height;
NSLog(@"listHeight%f",listHeight);

【问题讨论】:

你在哪里执行显示​​第二个 VC 的代码 它在按下编辑按钮时被调用。编辑按钮有一个调用代码的处理程序。 看来你的问题在于自动布局,我认为在展示模型 VC 后它得到“修复”的事实只是一个副作用。因此,让我们处理根本原因。向我们展示您的限制条件,scrollViewtextView 之间的关系等。 【参考方案1】:

试试这个

-(void)viewDidLayoutSubviews
 
    self.textView.text = listText;
    float listHeight = self.textView.contentSize.height;
    NSLog(@"listHeight%f",listHeight);
 

【讨论】:

当我包含这个方法时,会发生完全相同的事情。在第一次加载时,它会记录 139(故事板中文本视图的高度)。模态VC启动和关闭后,根据87的文本量给出真实高度。 然后,试试 viewDidAppear 我扔了线 [self.textView sizeToFit];在 float listHeight 之前,这似乎解决了这个问题。但是,它会创建另一个,因为它会缩小 textview 的宽度。

以上是关于IOS/Autolayout:在显示的控制器关闭后更改为显示视图的主要内容,如果未能解决你的问题,请参考以下文章

带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失

iOS Autolayout:如何显示/隐藏包含边距的视图?

iOS Autolayout - 在半透明导航栏下方正确定位视图

IOS / Autolayout:在生命周期中为代码中创建的元素设置约束

IOS / Autolayout可能只用于顶视图而不设置子视图?

带有砌体的iOS AutoLayout,未能将子底部设置为父底部