我有一个contentview(在xib文件中定义),其中有一些标签和两个按钮(屏幕截图1.a上的白色视图)。如果我们看到了它在屏幕上的显示方式,请让我绘制方案;
ViewController View -> View (Custom View Class) -> UIScrollView -> ContentView (Xib file)
放置与下边距相关的按钮。他们俩都放到了最底层。 “顶部”按钮具有一个约束,该约束具有与最后一个标签的底部相关的10个常数(这是greater than equal constraint
且UILayoutPriority
为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
}
示例屏幕截图:
如果内容适合查看,我希望如下图所示。如果没有,按钮会一直上升到适合为止;如果即使不合适,按钮也应该可以滚动。
屏幕截图2.a
答案 0 :(得分:2)
以下一行应该足以计算滚动视图内内容的高度,并为您提供预期的正确行为。
contentView.heightAnchor.constraint(greaterThanOrEqualTo: scrollView.heightAnchor).isActive = true