2010-08-17 2 views
3

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

Portait

Landscape

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

+0

быстрый вопрос, делает ли изменение ширины работы? –

+0

Да. Только высота проблематична. –

+0

Какая маска авторезистировки установлена ​​на супервизор? Кроме того, вы устанавливаете маску в IB или в коде? –

ответ

2

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

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

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

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

+0

Спасибо за предложение. Как ни странно, если я создаю категорию с setBounds на UIView и вызову super, я получаю: «- [UIView setBounds:]: unrecognized selector». Любая идея, почему это было бы? –

+0

Поскольку категория не является подклассом. Мальчик, это было плотно. –

+0

Для «базового вызова» в категории см. Http://stackoverflow.com/questions/3487828/if-i-override-a-class-method-is-there-a-way-i-can-call- заместитель оригинала-метод-The/3490215 # 3490215 –

Смежные вопросы