2016-11-13 1 views
0

Я включил этот color slider в свое приложение, и у меня возникли проблемы с его вставкой в ​​ячейку просмотра таблицы, чтобы она занимала длину ячейки в обоих портретах и пейзаж. Ниже приведены два снимка экрана, показывающие мое приложение в портретном и ландшафтном отношении. Вы можете видеть, что слайдер цвета не расширяет всю длину ячейки. Вот мой код, который устанавливает цветной слайдер. Я пытаюсь выяснить, как код свойства CGRect, чтобы цветной слайдер динамически заполнял длину ячейки.Установите цветной слайдер в виде таблицы сотовой ячейки на всю длину ячейки

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) 
    } 

Текущий вид в портретном: Color Slider Portrait

Текущий вид в ландшафте: Color Slide Landscape

EDIT (Снова) Из вашего предложения я обновил свой код, приведенный ниже. Это прекрасно работает в портретной ориентации. Цветовой слайдер занимает полный размер ячейки справа от метки цвета. Однако, когда я поворачиваю телефон в альбомную ориентацию, цветной слайдер заполняет только половину экрана. Ниже приведен снимок экрана о том, как он выглядит.

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) ]) 


} 

Landscape Updated Code

ответ

1

Причина вы установите ширину цветового ползуна до 200, так что всегда будет 200.

Вы должны использовать автоматическую раскладку для того чтобы достигнуть этого, вы можете добавить ограничения в вашем раскадровке/файл бобов или если вы построили вид programticly вы можете добавить autolayout используя anchores например, что-то вроде этого

colorSlider.translatesAutoresizingMaskIntoConstraints = false 

NSLayoutConstraint.activateConstraints([ 
     colorSlider.leadingAnchor.constraintEqualToAnchor(UILable.leadingAnchor), 
     colorSlider.trailingAnchor.constraintEqualToAnchor(cell.trailingAnchor), 
     colorSlider.topAnchor.constraintEqualToAnchor(cell.topAnchor, constant: 8), 

colorSlider. bottomAnchor.constraintEqualToAnchor (cell.bottomAnchor, constant: -8) ])

+0

Спасибо за ответ. Я пробовал это, но это сбой моего приложения. Имеет смысл, что я должен использовать автомасштабирование для достижения этого. Я буду продолжать играть с кодом. – chickenparm

+0

Код, который я привел, является примером, который трудно передать вам, не видя полного кода. Какая ошибка возникает при ее сбое. Вы используете раскадровки? – AlexanderKaran

+0

Я использую раскадровки. Я только что обновил свой вопрос выше кодом, который я пробовал из вашего предложения. Спасибо вам за помощь! – chickenparm

Смежные вопросы