我是Swift的新手,并尝试以编程方式将标签添加到嵌入滚动视图的UIView中。
实际上,我想要一些标题(屏幕一半的图片和标题)和下面的内容(长度和图像未知的文字)。
我添加了一个视图容器,并根据我要添加标签或图像视图的内容。 大部分时间都是这样的:
text
image
text
image
等等。
添加标签代码(Swift 4):
let label = UILabel()
label.numberOfLines = 0
label.text = blogItem.text
containerView.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: containerView, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0).isActive = true
问题是文本被截断,当到达屏幕的末尾并且根本没有滚动时。
如何才能正确地添加底部约束(我相信这一切都是因为它而发生?)以实现预期的行为?
答案 0 :(得分:1)
确保为工作UIScrollView
创建了适当的层次结构:
在层次结构中添加scrollView
并使用autolayout正确布局它,例如,如果它应该涵盖view
的整个viewController
:
scrollView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
scrollView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
scrollView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
])
然后您需要向contentView
添加scrollView
并为其提供适当的布局约束,因此如果您希望在我上面开始的示例中可垂直滚动scrollView
,您需要遵循自动布局约束:
contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
// horizontal anchors of contentView are constrained to scrollView superview
// to prevent it from scrolling horizontally
contentView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
contentView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
// but vertical anchors of contentView are constrained to
// scrollView to allow scrolling
contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
])
请注意,我将leftAnchor
的{{1}}和rightAnchor
限制为contentView
而不是self.view
,以使其具有固定宽度。但是,top和bottom锚点被约束到scrollView,因此当scrollView
需要更多空间时,它们会被展开和滚动。
现在您添加了contentView
您想要的所有内容,并使用自动布局进行布局,就像contentView
是一个无限高度的视图一样 - contentView
将通过滚动来完整呈现它。因此,在我的示例中,如果唯一的内容是一个包含多行的scrollView
UILabel
是label
的子视图:
contentView
尝试检查代码并检查约束。可能是你错过了两种情况下的约束,而且它在第一种情况下起作用的事实只是巧合。