How to get contentview inside UIScrollView to fill parent with autolayout
所以我有一个工作 UIScrollView 和一个内容视图,可以水平滚动没有问题。我已经按照我能找到的所有在线资源进行操作,并且所有与滚动相关的内容都有效...我的问题是放在 contentview 中的内容没有填充到 UIScrollViews 底部。就像滚动条占据了底部 5-10 个像素,使内容无法在那里拉伸。
在附加的示例图片中,可以看到文本没有沿着整个条对齐,所有项目都以相同的方式添加,唯一不同的是小滚动区域内的那些以 UIScrollView 作为父项。令人沮丧的是,如果我设置框架和内容区域而不是使用自动布局约束,这不是问题。
一切都在代码中(除了最外面的父级,它的固定高度约束为 50,左右边距为 0)
滚动视图和内容视图的约束:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // // scroll constraint // barScrollView.translatesAutoresizingMaskIntoConstraints = false // left constraint let leftSideConstraint = NSLayoutConstraint(item: barScrollView, attribute: .Left, relatedBy: .Equal, toItem: menuBtn, attribute: .Right, multiplier: 1.0, constant: 0) self.addConstraint(leftSideConstraint) // top constraint let topSideConstraint = NSLayoutConstraint(item: barScrollView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1.0, constant: 0) self.addConstraint(topSideConstraint) // bottom constraint let botSideConstraint = NSLayoutConstraint(item: barScrollView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1.0, constant: 0) self.addConstraint(botSideConstraint) // right side constraint let rightSideConstraint = NSLayoutConstraint(item: barScrollView, attribute: .Right, relatedBy: .Equal, toItem: collapseBtn, attribute: .Left, multiplier: 1.0, constant: 0) self.addConstraint(rightSideConstraint) // // scroll content constraint // barScrollContentView.translatesAutoresizingMaskIntoConstraints = false // left constraint let contentLeftSideConstraint = NSLayoutConstraint(item: barScrollContentView, attribute: .Left, relatedBy: .Equal, toItem: barScrollView, attribute: .Left, multiplier: 1.0, constant: 0) barScrollView.addConstraint(contentLeftSideConstraint) // top constraint let contentTopSideConstraint = NSLayoutConstraint(item: barScrollContentView, attribute: .Top, relatedBy: .Equal, toItem: barScrollView, attribute: .Top, multiplier: 1.0, constant: 0) barScrollView.addConstraint(contentTopSideConstraint) // bottom constraint let contentBotSideConstraint = NSLayoutConstraint(item: barScrollContentView, attribute: .Bottom, relatedBy: .Equal, toItem: barScrollView, attribute: .Bottom, multiplier: 1.0, constant: 0) barScrollView.addConstraint(contentBotSideConstraint) // right side constraint let contentRightSideConstraint = NSLayoutConstraint(item: barScrollContentView, attribute: .Right, relatedBy: .Equal, toItem: barScrollView, attribute: .Right, multiplier: 1.0, constant: 0) barScrollView.addConstraint(contentRightSideConstraint) |
里面的所有项目都添加如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /** Add constraints to an item used in the bar - parameters: - newElement: The new element that is added - leftElement: The element to the left of the new element - parent: The parent view the constraint is added to - width: The size of the new element - isFirstItem: Boolean indicating if this item is the furtest item to the left side in the current container */ func addConstraintToItem(newElement: UIView, leftElement: UIView, parent: UIView, width: CGFloat, isFirstItem: Bool) { newElement.translatesAutoresizingMaskIntoConstraints = false // Width constraint let widthConstraint = NSLayoutConstraint(item: newElement, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: width) parent.addConstraint(widthConstraint) // Height constraint //let heightConstraint = NSLayoutConstraint(item: newElement, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: self.frame.height) //parent.addConstraint(heightConstraint) // left constraint var leftSideConstraint: NSLayoutConstraint if isFirstItem { leftSideConstraint = NSLayoutConstraint(item: newElement, attribute: .Left, relatedBy: .Equal, toItem: leftElement, attribute: .Left, multiplier: 1.0, constant: 0) } else { leftSideConstraint = NSLayoutConstraint(item: newElement, attribute: .Left, relatedBy: .Equal, toItem: leftElement, attribute: .Right, multiplier: 1.0, constant: 0) } parent.addConstraint(leftSideConstraint) // top constraint let topSideConstraint = NSLayoutConstraint(item: newElement, attribute: .Top, relatedBy: .Equal, toItem: parent, attribute: .Top, multiplier: 1.0, constant: 0) parent.addConstraint(topSideConstraint) // bot constraint let botSideConstraint = NSLayoutConstraint(item: newElement, attribute: .Bottom, relatedBy: .Equal, toItem: parent, attribute: .Bottom, multiplier: 1.0, constant: 0) parent.addConstraint(botSideConstraint) } |
尝试向