2017-02-06 1 views
0

Я создаю панель IOS реального времени, и мне нужно динамически отображать элементы пользовательского интерфейса (в настоящее время UISlider или UISwitch) внутри UITableViewCell в зависимости от полученных данных. У ячейки tableview (и связанного с ней XIB) есть метка с левой стороны и справа - UISwitch или UISlider.Как правильно показать/скрыть элементы управления пользовательским интерфейсом и ограничения на обработку

Я могу показать/скрыть элементы пользовательского интерфейса с помощью свойства isHidden каждого компонента, но ограничение автоопределения всегда помещает элементы интерфейса рядом друг с другом, хотя в построителе интерфейса я поместил компоненты пользовательского интерфейса поверх каждого другой (потому что мне нужно показать либо ползунок, либо переключатель не оба). BTW - я не могу использовать несколько UITableViewCells из-за некоторых проблем RXSwift.

+0

пожалуйста включают скриншот файла XIb – Mentos

ответ

0

Свойство «скрытое» не изменит ограничения макета.
Элемент управления будет скрыт, но все равно займет место, которое он должен взять.
Сказав это, компонент UIStackView отслеживает его «скрытое» свойство детей и изменяет ограничения при изменении свойства.
Вы можете поместить свой ползунок и переключиться внутри UIStackView и установить либо один на видимый, либо нет.
Я бы так не сделал.
Я бы построил два типа ячеек: один с UISwitch и один с UISlider и использование другой ячейки на основе содержимого.

+0

Спасибо iMoses за обратную связь ... Я первоначально имел несколько пользовательских ячеек для обработки UISlider или UISwitch, но я преобразовал мое приложение, чтобы использовать RxSwift и эта структура не обрабатывают несколько ячеек в представлении таблицы (способ, которым я ее реализовал), поэтому я немного зациклен на использовании одной ячейки. Позвольте мне попробовать UIStackView (никогда не использовал его раньше) ... Я знаю, что это не изящно, но если я работаю, я сделал худшие дизайнерские решения :-) – Cameron

0

В Swift свойство 'hidden' не является динамическим var. вы не можете наблюдать за ним, но вы можете попытаться наблюдать за установщиком имущества.

детали: http://simcai.com/2017/03/29/2017-03-29/

let view = UIView() 

view.rx.methodInvoked(#selector(setter: showAllView.isHidden)).subscribe { (isHidden) in 
    print("\(isHidden)") 
} 

view.isHidden = true