2016-11-18 54 views
1

我在一个tableview单元中有一个color slider,该单元从标签延伸到单元格的尾部锚点。我遇到的问题是当设备方向更改颜色滑块不更新其约束并不再扩展单元格的全部长度。以下是我的代码来设置颜色滑块上的约束。下面是显示我遇到的问题的图像。如果我在呈现此场景时手机已处于横向方向,则颜色滑块会根据需要延伸单元格的整个长度。但是,如果我在查看此场景时切换到风景,滑块将如下所示。如果有帮助,这里是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) ]) 


    } 
+0

使用'CALayers'是'ColorSlider'的内容吗?他们不更新他们的大小/位置与自动布局。 –

+0

它的确如此。使用CAGradientLayer()绘制颜色滑块。这一定是问题。如果我不能使用自动布局,您是否有建议调整滑块大小? – chickenparm

回答

1

CALayers不会响应被调整到它们的父UIView调整大小,是否通过自动布局或手动。

您只需将代码添加到ColorSlider即可在ColorSilider的大小/位置更改时更新图层。幸运的是,在UIView上有一个专门用于此的方法。

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

谢谢!当我添加Xcode时,Xcode让我添加了这个功能,但它工作正常!如果没有公开,它会给我提示“覆盖实例方法必须与其包含的类型一样可访问” – chickenparm

+0

这是正确的。如果“ColorSlider”是公开的,那么您覆盖的任何方法都必须是公共的。 –