所以,如果我理解正确,您遇到的问题是您的后退按钮无法根据滚动视图的底部定位。
一个滚动在情节提要中有两组约束,一组定义滚动视图的大小,另一组定义内容大小。滚动视图上的上、左、下、右约束将定义大小。
导致您的问题的部分是内容大小由滚动视图内的子视图定义。所以按钮不能相对于滚动视图的底部放置,因为滚动视图不知道它的内容大小有多大。滚动视图的所有子视图必须相互关联。
因此,为您的徽标、文本字段和所有相互关联的按钮创建约束。然后创建从最外层子视图到滚动视图的约束。
在您的示例中,您将约束从徽标到文本字段,第一个文本字段到第二个文本字段,然后第二个文本飞到标签,标签到“发送电子邮件...”按钮,最后是“发送电子邮件...”到“验证代码”。对于“返回”按钮,它需要与文本字段左对齐,然后与“验证代码”按钮居中对齐。创建从徽标到滚动视图的顶部约束。然后有从文本字段之一到滚动视图的前导和尾随约束。最后,创建一个从“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
}