约束未随设备方向更改而更新

时间:2016-11-18 16:16:12

标签: ios swift autolayout

我在tableView单元格中有一个color slider,它从标签延伸到单元格的trailingAnchor。我遇到的问题是当设备方向改变时,颜色滑块不会更新其约束,也不再延长单元格的整个长度。下面是我在颜色滑块上设置约束的代码。以下是显示我遇到的问题的图片。当我呈现此场景时,如果我的手机已经处于横向,则颜色滑块会根据需要延伸单元格的整个长度。但是,如果我在查看此场景时切换到横向,则滑块如下所示。如果有帮助,这是full code

Slider Portrait Slider Landscape

  func configureColorSlider() {
    let colorSlider = ColorSlider()
    let xCell = colorCell.contentView.bounds.width
    let yCell = colorCell.contentView.bounds.height
    colorSlider.frame = CGRect(x: xCell / 4, y: yCell / 4, width: 200, height: 24)
    colorSlider.orientation = .horizontal
    colorSlider.addTarget(self, action: #selector(ConfigureTimestampTableViewController.changedColor(_:)), for: .valueChanged)

    colorCell.contentView.addSubview(colorSlider)

    colorSlider.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([colorSlider.leadingAnchor.constraint(equalTo: colorLabel.trailingAnchor, constant: 8),
                                 colorSlider.trailingAnchor.constraint(equalTo: colorCell.contentView.trailingAnchor, constant: -8),
                                 colorSlider.topAnchor.constraint(equalTo: colorCell.contentView.topAnchor, constant: 8),
                                 colorSlider.bottomAnchor.constraint(equalTo: colorCell.contentView.bottomAnchor, constant: -8) ])


  }

1 个答案:

答案 0 :(得分:1)

无论是通过自动布局还是手动调整,{p> CALayers都不会调整其父级UIView的大小。

您需要向ColorSlider添加代码,以便在ColorSilider的尺寸/位置发生变化时更新图层。幸运的是,UIView上有一种专门针对此的方法。

override func layoutSubviews() {
    super.layoutSubviews()
    gradientLayer.frame = bounds
}