UIScrollView上的下一个上一个按钮

时间:2018-05-07 15:59:10

标签: ios xcode uiscrollview

我在Interface Builder(Xcode 9 / iOS 11)中遇到布局问题。

我有一个UIScrollview,我有2个按钮(下一个和上一个视图)。 如果我将按钮放在滚动视图下,它们就会出现并起作用。但如果我把它们放在滚动视图上,它们就不再出现了。

可能是什么问题?

布局按钮和滚动视图:

Layout buttons and scrollview

警告讯息:

Warning message

Drag scrollview Constraints

3 个答案:

答案 0 :(得分:0)

您首先需要了解UIScrollView的工作原理。再次检查警告消息。它说:

  

ScrollView具有不明确的可滚动内容

这意味着您的scrollView的子视图没有足够的约束附加到它们和scrollView以使scrollView滚动。那么scrollView如何滚动?如果scrollView的内容超出scrollView的框架(宽度或高度),则scrollView将可滚动。

在您的问题中,两个按钮不会相互推动到scrollView的框架,这是否清楚?这意味着您的按钮没有足够的约束。

我会尝试稍微提供一个例子。

答案 1 :(得分:0)

在Interface Builder中工作时,如果将一个对象拖放到容器对象上 - 例如UIViewUIScrollView(也是UIView),对象将成为容器的子视图

这使得做你想做的事情有点困难,就是把按钮放在滚动视图之上, 作为滚动视图的子视图。

正如您在此图片中看到的那样,按钮显然不是滚动视图的子视图:

enter image description here

在此图片中,我将按钮拖放到滚动视图上,然后它们变为子视图

enter image description here

因此,要获得所需内容,请在滚动视图的外部按钮添加并设置其约束。我将Prev16的前导约束Next给了16的尾随约束... ...都限制在视图,而不是滚动视图。然后我将Next限制为垂直居中于Prev,以便它们保持垂直对齐。

然后为滚动视图提供Prev居中垂直约束。选择Editor -> Update Frames,按钮将移动到位,但是 - 正如您从文档大纲中看到的那样 - 它们是不是滚动视图的子视图:

enter image description here

此时,您可以拖动滚动添加的任何内容作为滚动视图的子视图(例如此处的图像视图),而不会影响按钮:

enter image description here

答案 2 :(得分:0)

我假设您希望按钮在滚动视图的上方(而不是 )。在Xcode 11 Interface Builder中,这很容易,它使您可以将滚动视图的子视图(即其内容视图)固定到“框架布局指南”或“内容布局指南”或两者的组合。

框架布局指南通过基于除滚动视图或其容器之外的任何超级视图(即,包含该对象的父视图的另一个同级子视图)应用宽度和高度约束来定义内容视图可见区域的大小。滚动视图)。

内容布局指南定义了基于内容视图的宽度和高度限制的内容视图的整个区域的大小,该宽度或高度当然大于滚动视图的框架:

The Content Layout Guide, selected in Xcode 11 Interface Builder, provides the intrinsic size constraints required by a scrollview

使用这些布局指南可以避免在任一方向上切换滚动;将内容布局指南限制为滚动视图可见框架的高度或宽度决定了它可以垂直滚动还是水平滚动。

这意味着,如果将滚动视图的子视图约束到“框架布局指南”中,它将不会滚动(并且将是滚动视图的真实子视图)。

The

  

框架和内容布局指南已添加到UIScrollView界面中   Xcode 11中的Builder组件尚未记录;但是,苹果   仍会分发an out-dated document,其中描述了如何在使用Xcode 10或更早版本的滚动视图中创建>“浮动视图”。

相关问题