iOS - 使用滚动视图的奇怪约束
Posted
技术标签:
【中文标题】iOS - 使用滚动视图的奇怪约束【英文标题】:iOS - wierd constraints using scrollview 【发布时间】:2017-02-27 14:47:03 【问题描述】:当我使用 scrollView 时,我的行为很奇怪。 正如您在下图中看到的,名为“Back”的按钮有一个值为 0 的底部空间约束。但我们可以看到它甚至不靠近滚动视图的底部。 我已经将滚动视图设置为具有等于 superView 的宽度和高度以及顶部、底部、尾随和前导空间的 0 值。
我该如何解决这个问题?我希望后退按钮仍在滚动视图内并将其放在视图的底部。
更新
我这里有代码https://github.com/rchampa/NDParallaxIntroView,xib 叫做 PageB.xib
【问题讨论】:
从验证代码中移除顶部约束。 我已经更新了这个问题,因为“后退按钮”也发生了同样的情况 OK 然后从滚动视图中删除高度约束,因为滚动视图从其子视图中获取高度。 但是,滚动视图有很多子视图,而不仅仅是一个。你可以在图片上看到它。 查看下方:***.com/questions/16825189/… 【参考方案1】:Ricardo:您添加了两个关于管理 Validate Code 按钮的 y 位置的约束,您的顶部约束停止以将 Validate Code 按钮移向底部。所以请去掉验证代码的顶部约束,只添加底部约束。
您需要管理所有约束,例如您的滚动视图内容视图高度将等于高度。请从顶部增加一些顶部约束。
【讨论】:
您说的是“发送电子邮件”按钮吗?此按钮与“验证代码”相关。我会更新这个问题,因为这也发生在后退按钮上。 实际上发生这种情况是因为滚动视图占用了它的内容大小。所以返回按钮来自滚动视图内容大小的底部。为了管理这一点,您需要注意从上到下的所有 UIControls 约束,这将增加滚动视图的内容大小。 你是说我必须在运行时将滚动视图的顶部和底部空间的约束更新为0? 不,请增加发送电子邮件验证按钮的上边距,您会看到底部控制器将移动到底部,因为滚动视图内容大小会增加。 某些约束不满足滚动视图内容大小等于滚动视图实际高度。请检查我的更新答案。【参考方案2】:所以,如果我理解正确,您遇到的问题是您的后退按钮无法根据滚动视图的底部定位。
一个滚动在情节提要中有两组约束,一组定义滚动视图的大小,另一组定义内容大小。滚动视图上的上、左、下、右约束将定义大小。
导致您的问题的部分是内容大小由滚动视图内的子视图定义。所以按钮不能相对于滚动视图的底部放置,因为滚动视图不知道它的内容大小有多大。滚动视图的所有子视图必须相互关联。
因此,为您的徽标、文本字段和所有相互关联的按钮创建约束。然后创建从最外层子视图到滚动视图的约束。
在您的示例中,您将约束从徽标到文本字段,第一个文本字段到第二个文本字段,然后第二个文本飞到标签,标签到“发送电子邮件...”按钮,最后是“发送电子邮件...”到“验证代码”。对于“返回”按钮,它需要与文本字段左对齐,然后与“验证代码”按钮居中对齐。创建从徽标到滚动视图的顶部约束。然后有从文本字段之一到滚动视图的前导和尾随约束。最后,创建一个从“Back”或“Validate Code”按钮到滚动视图的底部约束。您还需要一些对齐约束(文本字段的徽标中心就是一个示例)。完成所有设置后,您的视图将根据滚动视图的内容大小完全定义。
如果我理解你,我的新问题是:如何制作子视图 使滚动高度适合 100% 屏幕设备高度?有没有 像android这样定义权重的方法?我不知道如何实现这一点 因为画布是 600*600,每个设备都不同。
回复太长,无法发表评论:
所以你不会为此使用滚动视图。滚动视图专门用于包含不适合屏幕的内容(因此用户可以滚动以到达新内容)。
最简单的解决方案是添加一个具有 TopLeftBottomRight 0 距离约束的常规视图(因此它是屏幕的最大高度和宽度)并像您在此处一样设置视图以始终将底部定位在左下角.
还有一个重量系统,如果你愿意,我可以解释,但目前不需要。
我觉得您的下一个回复将是“如果我希望它在当前屏幕太小时滚动怎么办?”。我知道这样做的唯一方法是将所有界面封装到单个 UIView 中,并根据滚动视图的大小在 viewDidLoad/viewDidAppear 中更改其大小。像这样的:
func viewDidLoad()
super.viewDidLoad()
containerViewHeightConstraint.constant = scrollView.frame.size.height
containerViewWidthConstraint.constant = scrollView.frame.size.width
【讨论】:
如果我理解你,我的新问题是:如何使子视图使滚动高度适合 100% 屏幕设备高度?有没有办法像Android一样定义权重?我不知道如何实现这一点,因为画布是 600*600,每个设备都不同。以上是关于iOS - 使用滚动视图的奇怪约束的主要内容,如果未能解决你的问题,请参考以下文章
应使用哪些滚动视图和图像视图设置在 iOS 中显示可缩放图片?