我在Interface Builder(Xcode 9 / iOS 11)中遇到布局问题。
我有一个UIScrollview,我有2个按钮(下一个和上一个视图)。 如果我将按钮放在滚动视图下,它们就会出现并起作用。但如果我把它们放在滚动视图上,它们就不再出现了。
可能是什么问题?
布局按钮和滚动视图:
警告讯息:
答案 0 :(得分:0)
您首先需要了解UIScrollView
的工作原理。再次检查警告消息。它说:
ScrollView具有不明确的可滚动内容
这意味着您的scrollView的子视图没有足够的约束附加到它们和scrollView以使scrollView滚动。那么scrollView如何滚动?如果scrollView的内容超出scrollView的框架(宽度或高度),则scrollView将可滚动。
在您的问题中,两个按钮不会相互推动到scrollView的框架,这是否清楚?这意味着您的按钮没有足够的约束。
我会尝试稍微提供一个例子。
答案 1 :(得分:0)
在Interface Builder中工作时,如果将一个对象拖放到容器对象上 - 例如UIView
或UIScrollView
(也是UIView
),对象将成为容器的子视图。
这使得做你想做的事情有点困难,就是把按钮放在滚动视图之上, 不 作为滚动视图的子视图。
正如您在此图片中看到的那样,按钮显然不是滚动视图的子视图:
在此图片中,我将按钮拖放到滚动视图上,然后它们变为子视图:
因此,要获得所需内容,请在滚动视图的外部按钮添加并设置其约束。我将Prev
和16
的前导约束Next
给了16
的尾随约束... ...都限制在视图,而不是滚动视图。然后我将Next
限制为垂直居中于Prev
,以便它们保持垂直对齐。
然后为滚动视图提供Prev
居中垂直约束。选择Editor -> Update Frames
,按钮将移动到位,但是 - 正如您从文档大纲中看到的那样 - 它们是不是滚动视图的子视图:
此时,您可以拖动滚动添加的任何内容作为滚动视图的子视图(例如此处的图像视图),而不会影响按钮:
答案 2 :(得分:0)
我假设您希望按钮在滚动视图的上方(而不是 )。在Xcode 11 Interface Builder中,这很容易,它使您可以将滚动视图的子视图(即其内容视图)固定到“框架布局指南”或“内容布局指南”或两者的组合。
框架布局指南通过基于除滚动视图或其容器之外的任何超级视图(即,包含该对象的父视图的另一个同级子视图)应用宽度和高度约束来定义内容视图可见区域的大小。滚动视图)。
内容布局指南定义了基于内容视图的宽度和高度限制的内容视图的整个区域的大小,该宽度或高度当然大于滚动视图的框架:
使用这些布局指南可以避免在任一方向上切换滚动;将内容布局指南限制为滚动视图可见框架的高度或宽度决定了它可以垂直滚动还是水平滚动。
这意味着,如果将滚动视图的子视图约束到“框架布局指南”中,它将不会滚动(并且将是滚动视图的真实子视图)。
The
框架和内容布局指南已添加到UIScrollView界面中 Xcode 11中的Builder组件尚未记录;但是,苹果 仍会分发an out-dated document,其中描述了如何在使用Xcode 10或更早版本的滚动视图中创建>“浮动视图”。