Автоматическое изменение размера подпредставлений при изменении кадра суперпредставления - PullRequest
0 голосов
/ 31 мая 2018

У меня есть зеленый прямоугольник (viewA) с внутренним красным прямоугольником (viewB).Если я пытаюсь изменить размер viewA, viewB не изменяется автоматически.

Я пытаюсь:

  • проверить значение autoresizesSubviews (верно)
  • установить autoresizingMask
  • изменить границы вместо фрейма суперпредставления

Все эти решения не работают.

Это мой код:

@IBOutlet weak var viewA: UIView!

@IBOutlet weak var button: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func buttonAction(_ sender: Any) {
    viewA.autoresizesSubviews = true
    self.viewA.autoresizingMask = [.flexibleWidth, .flexibleHeight,.flexibleTopMargin, .flexibleLeftMargin, .flexibleRightMargin, .flexibleBottomMargin]
    viewA.bounds = CGRect(x: 0, y: 0, width: 100, height: 100) // or frame instead of bounds
}

enter image description here enter image description here

Спасибо всем.

РЕДАКТИРОВАТЬ:

Я добавляю два представления в раскадровке.Здесь вы также можете увидеть ограничение вида B.

enter image description here

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

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

Вам нужно сделать что-то вроде следующего.

Ограничения для вида A

  • CenterX и CenterY
  • (высота или ширина) и соотношение сторон 1: 1 (означает равную ширину и равную высоту)

Ограничения для viewB

  • Передний, задний, верхний и нижний к его суперпредставлению (т.е. viewA)

Теперь вам нужно создать@IBOutlet к ограничению, которое необходимо изменить (для viewA).

@IBOutlet weak var const_height_viewA: NSLayoutConstraints!

Поэтому при нажатии кнопки необходимо изменить только константу ограничения.

@IBAction func buttonAction(_ sender: Any) {
    const_height_viewA.constant = 250
    //changing height constraint of viewA will automatically updates viewB frame.
}

Примечание:Нет необходимости изменять ограничения viewB, так как он будет автоматически корректироваться с учетом заданных ограничений.

Для наглядности

enter image description here

0 голосов
/ 31 мая 2018

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

Обратите внимание на первую точку в разделе «Полезное правило» из docs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...