我在我的Swift 3代码中创建了一个UILabel(我在故事板上有一些标签,旋转时调整大小很好,它只是我在swift代码中创建的那些没有调整大小如此清楚我做错了) 。我希望宽度与其所在视图的宽度相匹配。当我创建它时,它的大小正确但是当视图旋转到横向模式时,它不会调整大小。我开始添加NSLayoutConstraint以使标签的右侧与视图的右侧匹配,但我一直遇到问题。深入研究文档后,我发现使用NSLayoutAnchor执行此任务更安全,更合适。该文档称它可以在编译时捕获更多自动布局问题。我发现情况确实如此,但更容易理解和使用。但是,它仍然无效。旋转视图时,标签保持相同的宽度。
// Swim Title
newXPosition = 4
label = UILabel(frame: CGRect(x: newXPosition, y: newYPosition, width: labelParentView.frame.width - 4, height: SPLIT_HEIGHT))
label.textAlignment = .left
label.text = "Swim Splits"
label.backgroundColor = UIColor.lightGray
self.labelParentView.addSubview(label)
// Creating the same constraints using Layout Anchors
let margins = labelParentView.layoutMarginsGuide
label.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
labelParentView.layoutIfNeeded()
答案 0 :(得分:0)
两种方法......
一个。告诉标签使用自动调整掩码:
self.labelParentView.addSubview(label)
// use autoresizing mask
label.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// don't need anything else
//let margins = labelParentView.layoutMarginsGuide
//label.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
//labelParentView.layoutIfNeeded()
或,B。关闭 off 自动调整遮罩,并添加约束:
self.labelParentView.addSubview(label)
// turn off autoresizing mask
label.translatesAutoresizingMaskIntoConstraints = false
// add constraints
label.leftAnchor.constraint(equalTo: labelParentView.leftAnchor, constant: 4.0).isActive = true
label.topAnchor.constraint(equalTo: labelParentView.topAnchor, constant: 4.0).isActive = true
label.rightAnchor.constraint(equalTo: labelParentView.rightAnchor, constant: -8.0).isActive = true
label.heightAnchor.constraint(equalToConstant: SPLIT_HEIGHT).isActive = true