Swift 3 - 无法获得标签 - 在代码中创建 - 在旋转到横向模式时匹配宽度

时间:2017-03-21 17:10:00

标签: ios swift3 rotation autolayout

我在我的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()

1 个答案:

答案 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