我有一个简单的屏幕,滑块和标签水平放置在一起。我已经在UIScrollView
中嵌入了这些(我将其设置为填充屏幕并使用“添加缺失约束”),因为我需要稍后垂直滚动。但是,我不想要水平滚动。我在这里看过很多关于人们想要禁用水平滚动的帖子,但是我不确定这是我想做什么,我想我需要限制UISlider
导致水平滚动;我认为它试图占据比屏幕更宽的空间。我添加了我认为必要的水平约束:
UISlider
UILabel
和UILabel
但这仍然导致水平滚动,UISlider
是原因,它们占用的空间比我想要的多,如下所示:
我尝试使用一些技巧禁用代码中的水平滚动,其中之一是:
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
scrollView.contentOffset.x = 0
}
}
但这似乎并没有停止水平滚动。
有人可以提出任何建议吗?
提前致谢。
答案 0 :(得分:0)
只需将UIScrollView
中的所有视图嵌入到UIView
中,为其提供所需的约束,然后滑块和标签就会保留。
这对我来说很有用。
答案 1 :(得分:0)
我的建议是从不使用添加缺失的约束。它永远不会做你真正想要的。
这是问题所在。您正在故事板中的ViewController
上布置您的用户界面。 Apple这样做是为了提醒您,您需要灵活设计,但它与任何设备的大小不一致。当你添加缺失约束时,它使用该方块的绝对尺寸来创建肯定是错误的约束。
在您的特定情况下,滑块的宽度过宽,这就是滑块偏离屏幕右侧的原因。
这是关于滚动视图的技巧。如果滚动视图内的内容比滚动视图本身宽,则该内容将滚动。这同样适用于垂直:如果滚动视图内的内容高于滚动视图,则内容将滚动。
为了将其设计为适用于所有手机,您需要确保为每种手机尺寸正确布置滚动视图的内容。这当然意味着您不希望对标签和滑块使用特定的宽度,因为对于某些设备(如果不是全部设备),您将得到错误的宽度。
最好的方法是:
UIView
并将其放在滚动视图上。拖动其边缘,直到它与滚动视图的大小完全匹配。这将是您的内容视图。将此内容视图的所有四个边都固定到滚动视图,偏移量为0
。这是一个棘手的问题。即使您已将内容视图固定到滚动视图,它的大小也可以自由增长,因为这样可以让它比滚动视图本身更大,并允许滚动内容。要防止滚动视图水平滚动,您需要确保内容视图的宽度与所有设备上的滚动视图相同。为此,请在故事板左侧的文档大纲中找到滚动视图和内容视图。 控制 -drag从内容视图到滚动视图,然后从弹出窗口中选择 Equal Widths 。
您仍然没有告诉您的内容视图应该有多高。现在,给它一个明确的高度约束1000
。这足以滚动。
如果您执行所有这些操作,您将拥有一个适合所有方向的垂直滚动的UI尺寸。
答案 2 :(得分:0)
UIScrollView是特别的,如果你想使用AutoLayout,子视图不能直接添加,它需要一个容器视图来约束UIScrollView的contentSize,Auto Layout Guide:Working with Scroll Views解释详细原因,你可以找到很多解决方案在Google上解决UIScrollView的自动布局,例如answer。
说实话,理解UIScrollView的自动布局会让人感到困惑和复杂,但如果你克服了这个问题,其他人的自动布局问题很容易解决。