自动布局和滚动视图宽度固定到屏幕(不是内容)
Posted
技术标签:
【中文标题】自动布局和滚动视图宽度固定到屏幕(不是内容)【英文标题】:Autolayout and Scrollview width fixed to screen (not content) 【发布时间】:2015-11-19 16:53:03 【问题描述】:我关注的例子有很多(大部分都是一样的),比如https://www.youtube.com/watch?v=UnQsFlMGDsI
我打开一个新项目,放入一个滚动视图,然后在其中放置一个“内容”视图,将滚动视图约束到它的超级视图(顶部、底部、左侧和右侧),然后内容视图被限制在滚动视图的内部并且然后是滚动视图超级视图的宽度和高度。滚动视图为红色,内容视图为黑色。
我将一个文本字段放入其中,然后将其限制在内容视图的顶部、前导和尾部。在情节提要中一切看起来都不错,但是当我运行它时,内容视图不存在,文本字段是其中对象的宽度(基于文本字段)。
然后我将内容视图的高度更改为固定的 800,我现在可以看到内容视图,但宽度由文本字段的大小固定(而不是相反),即如果我添加更多“测试信息”文字会变宽。
这不是我真正的项目,但我只是想消除原因,所以从头开始,它也是如此。我看不到我错过了什么(希望有一个复选框)。
如果我强制文本字段为 700 宽,它会水平向左滚动,我看不到如何将内容视图宽度固定到屏幕大小。
【问题讨论】:
【参考方案1】:更新答案
对不起,我之前发布的答案。我错过了一些观点。这里我会一步一步的向你解释需要做什么(参考截图)。
以下是添加了约束的整个视图的概览:
首先要做的是,添加滚动视图并添加相对于超级视图的前导、尾随、顶部和底部的约束。
接下来要做的是在滚动视图中添加UIView
。现在这部分很棘手,您刚刚添加的视图需要充当滚动视图的内容视图。因此,您需要添加到滚动视图的任何视图实际上都应该进入该视图。对于此视图,设置约束,例如顶部、底部、前导和尾随。但这里棘手的部分是,将超视图(即滚动视图)的底部约束设置为零,优先级低(250)。还要将此视图的宽度设置为等于滚动视图的父视图,即 ViewController 的视图以及滚动视图。
内容视图的约束
底部约束设置为零低优先级。
与滚动视图的超级视图以及滚动视图的宽度相等。
底部约束设置为低优先级,因为当涉及到视图的底部约束时,为了滚动工作,内部视图的约束需要被赋予更高的优先级。
现在在内容视图中添加所需的视图,在您的情况下是文本字段。添加与内容视图相关的所有必需约束(顶部、前导、尾随、底部)。添加您希望添加的任意数量的子视图,但请确保您为内容视图的最底部视图指定底部约束,这也具有所需的优先级。 以下是我在内容视图中添加的文本字段的约束:
请注意,在这种情况下,底部约束是必需的。
最终输出:
黄色 = ViewController 的视图,绿色 = 滚动视图,红色 = 容器视图,粉红色 = 文本字段。
需要制作水平滚动视图的任何人的注意事项,只需将内容视图的宽度与高度和底部约束与尾随约束进行切换。也就是说,将 superview 和 scrollview 的高度设置为相等,并将尾随空间固定为低优先级的滚动视图。
【讨论】:
我没有的两个部分是将内容视图的宽度设置为滚动视图和“主”视图。并且也没有设置低底约束。谢谢。 没有经过深思熟虑的旋转,消失在风景中,我知道是另一个问题,但有什么想法吗? 景观的问题在于,在这种情况下需要更新约束。使用尺寸等级并对横向布局应用类似的约束。 :-)以上是关于自动布局和滚动视图宽度固定到屏幕(不是内容)的主要内容,如果未能解决你的问题,请参考以下文章
如何让 UICollectionView 在不离开屏幕的情况下使用自动布局填充其包含滚动视图的宽度?