iOS - 使用scrollview的恶意约束

时间:2016-10-18 10:56:33

标签: ios uiscrollview uistoryboard

当我使用scrollView时,我有一个奇怪的行为。 你可以在下面的图片中看到名为" Back"的按钮。有一个值为0的底部空间约束。但我们可以看到甚至不在滚动视图的底部附近。 我已经将scrollview设置为等于superView的宽度和高度以及顶部,底部,尾部和前导空格的值为0。

enter image description here

enter image description here

我该如何解决这个问题?我希望Back按钮仍在scrollview中,并将其放在视图的底部。

更新

我的代码在https://github.com/rchampa/NDParallaxIntroView,xib称为PageB.xib

2 个答案:

答案 0 :(得分:1)

enter image description here里卡多:你已经添加了两个关于验证代码按钮的管理y位置的约束,其中你的顶部约束停止向底部移动验证代码按钮。因此,请删除验证码的顶部约束,仅添加底部约束。

您需要管理所有约束,例如您的滚动视图内容视图高度将等于高度。请从顶部增加一些顶级约束。

答案 1 :(得分:0)

因此,如果我理解正确,您遇到的问题是无法根据滚动视图的底部定位后退按钮。

滚动在故事板中有两组约束,一组用于定义滚动视图的大小,另一组用于定义内容大小。滚动视图的顶部,左侧,底部,右侧超视图约束将定义大小。

导致问题的部分是内容大小由滚动视图内的子视图定义。因此,无法相对于滚动视图的底部放置按钮,因为滚动视图不知道其内容大小有多大。滚动视图的所有子视图必须相互放置。

因此,为您的徽标,文本字段和所有相互关联的按钮创建约束。然后从最外面的子视图到滚动视图创建约束。

在您的示例中,您将限制从徽标到文本字段,第一个文本字段到第二个文本字段,然后第二个文本飞到标签,标签到“发送电子邮件...”按钮,最后“发送”电子邮件......“到”验证码“。对于“后退”按钮,它需要左对齐文本字段,然后中心与“验证代码”按钮对齐。从徽标到滚动视图创建顶部约束。然后从一个文本字段到滚动视图具有前导和尾随约束。最后,从“后退”或“验证代码”按钮到滚动视图创建一个底部约束。您还需要一些对齐约束(文本字段的徽标中心是一个示例)。在完成所有设置之后,您的视图将完全针对滚动视图的内容大小进行定义。

  

如果我理解你,我的新问题是:我如何制作子视图   使滚动的高度适合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
}