Как программно увеличить высоту UIView с помощью Swift
внутри IB у меня есть viewController с segmentedControl и 2 containerViews. В каждом containerView у меня есть tableView. Из каждого tableView я нажимаю на detailView. Мой автоматический макет находится в IB.
как только я выбираю сегмент, я вижу соответствующий tableView, я выбираю ячейку, и правильный detailView выталкивается на сцену.
проблема заключается в том, что как только detailView выталкивается на segmentedControl, он все еще виден. Я решил скрыть segmentedControl, который работает, но там большое пустое пространство. Я попытался программно увеличить размер представления detailView, но он не расширяется. Из того, что я читал, это потому, что я сделал начальные ограничения в раскадровках.
как программно получить представление detailView для расширения?
код:
DetailViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//this isn't increasing the view's 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)
левая сторона мутирующего оператора не изменяема: "высота" -это get-only собственность
//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, ширина: CGFloat, высота: ())'
3 ответов
вам нужно создать выход для ограничения высоты подробного представления, а затем вы можете настроить высоту программно, как это myHeightConstraint.constant += extraHeight
здесь extraHeight
- это число, указывающее, насколько выше вы хотите, чтобы подробный вид был. Вам также может потребоваться позвонить self.view.layoutIfNeeded()
потом.
чтобы создать выход из ограничения, перетащите элемент управления из ограничения в Редакторе раскадровки (как и для выхода UIView) в код.
вы правы - поскольку вы используете автоматическую компоновку и ограничения, корректировки также должны быть сделаны с ограничениями. Установка необработанных кадров может привести к неожиданному поведению. Дайте мне знать, если у вас есть какие-либо другие вопросы или трудности.
внутри 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
внутри инициализатора.
есть ли какие-либо ограничения по высоте, установленные для segmentedControl, если это так, вы можете удалить их при загрузке подробного представления