UIScrollView无法获得正确的contentSize

时间:2016-12-12 16:41:14

标签: ios uiscrollview

我的UIViews中有4个UIViewController颜色:黄色,绿色,灰色和蓝色。
我还给出了以下自动布局限制:
黄色视图:Top-8-superview,Leading-8-superview,Trailing-8-superview,height = 120
绿色视图:Top-8-YellowView,Leading-8-superview,width = 200,height = 100
灰色视图:Top-8-GreenView,Leading-8-superview,Trailing-8-superview,bottom-8-blueView;
BlueView :Bottom-60-superview,trailing-8-superview,width = 260,heigth = 30
编译运行后,看起来像这样:

enter image description here

此时,没有问题,没有约束投诉,一切都很好。

但是,我更改了4 UIView s'父视图到UIScrollView,然后UI显示错误:只显示绿色视图,缺少黄色视图和灰色视图,蓝色视图显示一小部分。 enter image description here

在控制台中,我检查了scrollView的contentSize.width为16,这是不正确的,所以我尝试在viewDidLayoutSubviews中更正它:

self.scrollView.contentSize = self.view.bonds.size;
[self.scrollView setNeedsDisplay];
[self.scrollView layoutIfNeeded];

contentSize变为(414,736),这是正确的,但显示仍然与我的第二个附加图像相同。我列出了视图详细信息:
YellowView :frame:(8,28,0,120)
GreenView :框架:(8,156,200,120)
GreyView :frame:(8,264,0,274)
BlueView :frame:( - 252,646,260,30)

我观察到的是,如果我给出宽度常数,视图的宽度至少大于0,对于黄色和灰色视图,因为它们是没有宽度约束的空白视图,所以它们将有问题显示

除了给出宽度限制之外,修复它的最佳解决方案是什么?我也想知道为什么黄色和灰色的宽度为零,因为我还给出了顶部,前导,尾随,高度限制?

1 个答案:

答案 0 :(得分:1)

contentView添加为scrollView的子视图,然后将所有子视图添加为contentView的子视图。 contentView的约束设置为width = superview.widthheight >= superview.heightcontentViewscrollView的第4个边(前导,顶部,尾部,底部)。更多信息:https://www.natashatherobot.com/ios-autolayout-scrollview/