2016-11-18 2 views
1

У меня есть color slider в ячейке tableView, которая простирается от метки до 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) ]) 


    } 
+0

Является ли содержимое 'ColorSlider' использующим' CALayers'? Они не обновляют свой размер/позицию с помощью автоматического макета. –

+0

Он делает. Использует CAGradientLayer() для рисования слайдера цвета. Это должно быть проблемой. У вас есть рекомендация по изменению размера слайдера, если я не могу использовать автоматическую компоновку? – chickenparm

ответ

1

CALayers не будет изменен в ответ на их родителей UIView изменение размера, будь Автокомпоновка или вручную.

Вам просто нужно добавить код в ваш ColorSlider, который обновляет слой при изменении размера/положения ColorSilider. К счастью, есть метод на UIView, который специально для этого.

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

Спасибо! Xcode заставил меня добавить публикацию к этой функции, когда я добавил ее, но она сработала! Без публики он дал мне сообщение «Метод переопределения экземпляра должен быть таким же доступным, как и его закрывающий тип» – chickenparm

+0

Правильно. Если 'ColorSlider' является общедоступным, любые методы, которые вы переопределяете, также должны быть общедоступными. –