Как программно увеличить высоту UIView с Swift
Внутри IB у меня есть viewController с segmentedControl и 2 containerViews. В каждом контейнере ViewView у меня есть tableView. Из каждого tableView я нажимаю на detailView. Мой авто макет в IB.
Как только я выбираю сегмент, я вижу соответствующий tableView, я выбираю ячейку, и на сцене появляется правильный detailView.
Проблема заключается в том, что когда detailView помещается в segmentedControl, он все еще остается видимым. Я решил скрыть сегментированный элемент управления, который работает, но там есть большое пустое пространство. Я попытался программно увеличить размер представления detailView, но он не расширялся. Из того, что я прочитал, потому что я сделал начальные ограничения в раскадровке.
Как программно получить представление detailView для расширения?
код:
DetailViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//this isn't increasing the view size
self.view.frame.size.height += 20.0
//doesn't work. I get an error on the last argument
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height += 20.0)
//doesn't work. I get an error on the last argument
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.size.height += 20.0)
}
}
Ошибки:
//Error for the last argument- height: *self.view.frame.height += 20.0*
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height += 20.0)
Левая часть оператора мутации не является изменяемой: свойство 'height' доступно только для получения
//Error for the last argument- *self.view.frame.size.height += 20.0*:
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.size.height += 20.0)
Невозможно вызвать инициализатор для типа 'CGRect' со списком аргументов типа '(x: Int, y: Int, width: CGFloat, height:())'
Ответы
Ответ 1
Вам нужно создать розетку для ограничения высоты подробного представления, а затем вы можете настроить высоту программно, как это показано на рисунке myHeightConstraint.constant += extraHeight
, где extraHeight
- это число, указывающее, насколько высока вы хотите, чтобы представление детали было. Вам также может потребоваться позвонить self.view.layoutIfNeeded()
после.
Чтобы создать выход из ограничения, перетащите его из ограничения в редакторе раскадровки (так же, как и для выхода UIView) в свой код.
Вы правы - потому что вы используете автоматическую компоновку и ограничения, корректировки также нужно делать с ограничениями. Установка необработанных кадров может привести к неожиданному поведению. Дайте мне знать, если у вас есть другие вопросы или трудности.
Ответ 2
Внутри инициализатора CGRect
вы не должны использовать +=
, просто +
.
Изменить:
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height += 20.0)
в
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height + 20.0)
Вы не должны пытаться изменить значение self.view.frame.height
внутри инициализатора.
Ответ 3
Существуют ли ограничения по высоте для segmentedControl, если это возможно, вы можете удалить их при загрузке подробного представления
Ответ 4
Используйте self.view.frame.size.height = 80