Скрыть UIButton, а не просто убрать видимость

Я хочу скрыть свой UIButton в своем приложении Swift 3.

В настоящее время я установил

cell.myButton.isHidden = true

Это делает кнопку невидимой, но место, которое занимает кнопка, по-прежнему занято.

Как я мог действительно скрыть кнопку?

Я создаю UIButton в tableViewCell и устанавливаю ограничения с помощью SnapKit.


person develth    schedule 23.03.2017    source источник


Ответы (4)


Пытаться

cell.myButton.removeFromSuperview()
person Ayman Karram    schedule 23.03.2017
comment
Макет потерпел крах. - person develth; 24.03.2017
comment
Если у вас есть другие ограничения элементов, связанные с этой кнопкой, обязательно произойдет сбой. Вы можете исправить это, добавив еще одно ограничение к этим связанным элементам, чтобы они были связаны с суперпредставлением. - person Ayman Karram; 24.03.2017
comment
Но он также удален из элементов таблицы, где он должен оставаться. - person develth; 24.03.2017
comment
Если вы хотите снова отобразить эту кнопку, сохраните это новое ограничение, которое вы добавили к другим элементам, и установите ограничение на ширину кнопки и установите значение 0, чтобы скрыть и cell.layoutIfNeeded() И установите значение ширины, чтобы показать его снова cell.layoutIfNeeded() - person Ayman Karram; 24.03.2017

Я думаю, вы можете использовать setNeedsLayout для настройки положения подвидов в вашем tableViewCell. Когда вы устанавливаете свойство buttonHide в своем классе tableViewCell, также вызывайте self.setNeedsLayout()
. Затем будет запущен ваш viewDidLayoutSubview, в котором вы должны установить фрейм подвидов вашего tableViewCell.

person jokeman    schedule 23.03.2017
comment
я вызвал cell.setNeedsLayout - но ничего не изменилось. - person develth; 24.03.2017
comment
@develth В вашем классе tableViewCell вам нужно переопределить viewDidLayoutSubview и поместить все подпредставления в нужное место (на основе значения вашего свойства buttonHide) - person jokeman; 24.03.2017

У вас есть различные варианты.

Вы можете добавить ограничения для высоты и ширины вашей кнопки, подключить их как выходы и установить константы ограничений равными 0. Это сделает их нулевого размера.

Вы можете удалить кнопку из ее супервизора, как показано в ответе @AymanKarram, но вам нужно будет сохранить на нее сильную ссылку, иначе она будет освобождена. (Попробуйте удалить слабый квалификатор в вашем объявлении @IBOutlet myButton в качестве теста. Это приведет к тому, что IBOutlet будет содержать строгую ссылку.)

person Duncan C    schedule 23.03.2017
comment
Я не создавал представление через раскадровку, поэтому у меня нет @IBOutlets. Есть ли возможность сохранить элементы, где мне нужна эта кнопка, с ответом Аймана Каррама? - person develth; 24.03.2017
comment
Создайте переменную экземпляра и сохраните в ней свою кнопку. - person Duncan C; 24.03.2017
comment
Переменная экземпляра будет хранить ссылку на кнопку, поэтому она не будет освобождена, когда вы удалите кнопку из ее супервизора. - person Duncan C; 24.03.2017

Как насчет установки высоты для этой строки tableView как 0?

person Felipe Ferri    schedule 23.03.2017
comment
У меня есть другие элементы в строке tableView, которые нужно показать. - person develth; 24.03.2017
comment
@develth, а если вы установите для кнопки ограничение высоты, равное 0? Если бы вы использовали ограничения раскадровки, я бы посоветовал вам создать выход для ограничения высоты и установить константу на 0, когда вы хотите скрыть кнопку. Но поскольку вы используете SnapKit, возможно, вы можете снова установить ограничения кнопки с высотой = 0. - person Felipe Ferri; 25.03.2017