【问题标题】:ScrollView width constraint with fixed width views具有固定宽度视图的 ScrollView 宽度约束
【发布时间】:2019-04-19 03:00:13
【问题描述】:
我正在使用 Swift 4 在 XCode 10 中开发一个应用程序。我已通过以下方式在 iPhone(wC、hR)的故事板中设置了我的视图:
我对此设置没有任何问题。
问题是当我对 iPad 进行调整时(wR,hR)。在这里,我禁用了尾随和前导约束,而是添加了 690 的宽度约束,并与超级视图水平对齐。当我这样做时,我收到一个约束错误,上面写着“不明确的可滚动内容宽度”。
我认为问题在于我相对于作为滚动视图的超级视图水平对齐,因此没有参考基本视图,但我不确定如何调整它以便它工作。
【问题讨论】:
标签:
ios
uiscrollview
ios-autolayout
【解决方案1】:
我认为您需要使用 两个“容器”视图。
对于 iPhone(wC、hR):
- scrollView -- Top:superview,Bottom:superview,Trailing:安全区域,Leading:安全区域)
- scrollView 的“SuperContainerView”子视图 -- Top/Bot/Lead/Trail 到 scrollView(superView),宽度与 scrollView 相等
- SuperContainerView 的“ContainerView”子视图 -- Top/Bot/Lead/Trail 到 SuperContainerView
ContainerView子视图的约束会控制ContainerView的高度,它会控制SuperContainerView的高度,它会控制滚动。
对于 iPad(wR、hR):
- 禁用 ContainerView 的前导和尾随约束
- 添加 690 的宽度约束
- 为 SuperContainerView 添加一个 CenterX 约束
结果...绿色是ContainerView,蓝色是SuperContainerView(滚动视图每边插入8):
如果您希望在旋转到横向的手机上运行时的最大宽度为 690,则需要对 wC、hC 进行类似的约束修改
【解决方案2】:
虽然它没有多大意义,但如果您还向 Container View 添加了对齐水平和垂直中心约束(关于它的 superview,Scroll View),它可能会有所帮助。
这是根据this answer 和我自己与 AL 的斗争。