在UIModalPresentationPageSheet中呈现UITableViewController时,Autolayout会中断

时间:2015-03-10 11:10:17

标签: ios objective-c

编辑:我设法将其归结为罪魁祸首: UIModalPresentationPageSheet (与UIModalPresentationFormSheet相同)

如果我删除它并制作一个简单的UIModal,自动布局不会中断...但是,我仍然没有设法找到解决方法,但我想UIModalPresentationPageSheet必须重新计算表的宽度并打破约束。

我在ViewDidLoad和ViewDidAppear之后尝试更新约束......但无济于事。

我一直想弄清楚为什么我的Autolayout会破坏。 我最初的布局比较复杂,但我把它分解为最简单的表达方式,它仍然会破坏。

这是我对单元格的初始设置:

enter image description here enter image description here

以下是Label的约束:

enter image description here

以下是UITextView的约束:

enter image description here

最后这是荒谬的结果...... UILabel已经消失......或者看起来似乎是因为如果我记录它的CGSize ......我的高度和宽度都很荒谬。

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

UI中的UITextView的宽度设置为722,如果iPad尺寸类中的标签缺少约束,该宽度将生效。

您是否有可能使用不反映标准约束的常规宽度常规高度的尺寸类?我会检查你为这个尺寸类安装的所有约束,因为它看起来像iPad尺寸类中没有标签。

检查预览窗口中不同设备的外观。这应该显示哪些布局有效,哪些布局无效。

编辑:从讨论中找到解决方案

有趣的是,我想知道尺寸类在页面或表单的模态表示中是否不同?使用弹出窗口时,宽度大小类将更改为紧凑。尝试使用模态FullScreen来查看是否存在问题?另请查看调试器中的[self.traitCollection]以查看它正在使用的大小类。

我发现最好在大多数开发中使用尺寸类Any / Any,然后添加例外。

答案 1 :(得分:0)

这是因为你的标签附在textview上,textview附在标签上,它不知道任何这些组件的宽度,这就是为什么它的行为如下。
您需要设置至少一个组件的宽度约束。或者,您可以将标签贴在superview上,然后将textview附加到标签上。