UIScrollView中的UILayoutPriority不会影响任何内容

时间:2019-03-07 05:48:43

标签: ios swift uiscrollview autolayout nslayoutconstraint

我有一个contentview(在xib文件中定义),其中有一些标签和两个按钮(屏幕截图1.a上的白色视图)。如果我们看到了它在屏幕上的显示方式,请让我绘制方案;

ViewController View -> View (Custom View Class) -> UIScrollView -> ContentView (Xib file)

放置与下边距相关的按钮。他们俩都放到了最底层。 “顶部”按钮具有一个约束,该约束具有与最后一个标签的底部相关的10个常数(这是greater than equal constraintUILayoutPriority为5)。

问题:当我甚至给按钮到标签赋予约束时,它大于等于,按钮堆叠到标签下方仅10点。即使底部有这么大的差距。 (屏幕截图2.a)

我要实现的目标:我希望,如果所有内容都适合显示在屏幕上,并且从最后一个标签到第一个按钮的最小约束为10,请不要滚动。如果没有,请滚动。

自定义视图类:

override init(frame: CGRect) {
    super.init(frame: frame)
    initialize()
}
func initialize() {
    self.translatesAutoresizingMaskIntoConstraints = false
    let name = String(describing: type(of: self))
    let nib = UINib(nibName: name, bundle: .main)
    nib.instantiate(withOwner: self, options: nil)

    cancelButton.layer.borderColor = UIColor.darkGray.cgColor
    cancelButton.layer.borderWidth = 1.0

    scrollView.translatesAutoresizingMaskIntoConstraints = false
    self.addSubview(self.scrollView)
    scrollView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
    scrollView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    scrollView.addSubview(contentView)

    self.contentView.translatesAutoresizingMaskIntoConstraints = false
    //self.contentView.clipsToBounds = true

    contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
    contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true 
}

示例屏幕截图:

如果内容适合查看,我希望如下图所示。如果没有,按钮会一直上升到适合为止;如果即使不合适,按钮也应该可以滚动。

screenshot 1.a

屏幕截图2.a

1 个答案:

答案 0 :(得分:2)

以下一行应该足以计算滚动视图内内容的高度,并为您提供预期的正确行为。

contentView.heightAnchor.constraint(greaterThanOrEqualTo: scrollView.heightAnchor).isActive = true