autoresizingMask для фиксированных размеров полей

В представлении, содержащем несколько подвидов, одно из них должно оставаться на фиксированном, ненулевом расстоянии от верхней и нижней части супервида. На этих изображениях этот вид показан серым цветом:

Портрет

Пейзаж

Согласно документации, это представление должно иметь маску UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth. Однако это заставляет представление увеличивать свою высоту, чтобы занять все суперпредставление. Как можно ограничить представление фиксированными, но ненулевыми полями? Спасибо.


person David M.    schedule 17.08.2010    source источник
comment
быстрый вопрос, работает ли изменение ширины?   -  person Jesse Naugher    schedule 17.08.2010
comment
да. Только высота смущает.   -  person David M.    schedule 17.08.2010
comment
Какая маска автоматического изменения размера установлена ​​​​в супервизоре? Кроме того, вы устанавливаете маску в IB или в коде?   -  person Andrew Pouliot    schedule 17.08.2010


Ответы (1)


UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth должно работать.

Тем не менее, есть ошибка с автоматическим изменением размера UIView, когда высота/ширина родительского представления становятся маленькими (и все ломается, когда она становится нулевой), возможно, просто высота/ширина UIView не может быть отрицательной.

Я столкнулся с этой проблемой при выполнении initWithFrame:CGRectZero; это также может произойти, если вы используете что-то вроде subview.frame = self.bounds, когда self.bounds равен CGRectZero (или маленькому).

Мой метод отладки грубой силы состоял бы в том, чтобы переопределить setFrame: и setBounds: для добавления NSLog.

person tc.    schedule 18.08.2010
comment
Спасибо за предложение. Как ни странно, если я создаю категорию с setBounds в UIView и вызываю super, я получаю -[UIView setBounds:]: нераспознанный селектор. Любая идея, почему это было бы? - person David M.; 25.08.2010
comment
Потому что категория не является подклассом. Боже, это было плотно. - person David M.; 25.08.2010
comment
Для базового вызова в категории см. stackoverflow.com/questions/3487828/ - person tc.; 02.09.2010