2010-01-24 4 views
20

Я работаю над автоматизацией пользовательского UIView, и Apple очень мало говорит об этом. Более того, основываясь на обратной связи SO, документация Apple в некоторых областях фактически неверна. Наконец, хотя в Interface Builder есть шесть компонентов для изменения размера и шесть для setAutoresizingMask:, они, похоже, не коррелируют вообще. Например, установка пружины ширины в IB имеет другой эффект от установки autoresizingMask на UIViewAutoresizingFlexibleWidth при вращении устройства.UIView Autoresizing Resources

Есть ли хорошие ресурсы для изучения того, как изменение размера работает на iPhone?

Edit:

Я понимаю, основные концепции Apple, использует такие как contentMode, и я прочитал документацию UIView. Я ищу что-то, что немного объясняет, что настройки IB делают с точки зрения того, что доступно в SDK программно.

ответ

32

устанавливая autoresizingMask к UIViewAutoresizingFlexibleWidth, эквивалентно установке пружина ширины плюс левая и правая стойки в Interface Builder (стойки означают, что край равен не гибкий). Если вы хотите воспроизвести поведение только установки пружины ширины, но не левой и правой стойки, вам нужно будет установить autoresizingMask на UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin

+3

Другой способ слова это: две внутренние линии указывают активные флаги автосохранения, если они красные (как и следовало ожидать), но 4 внешние строки указывают активную авторезистировку, если они серо (противоположно тому, что вы ожидаете). – Dustin

0

Для записи я поцарапал голову на час, потому что моя однострочная UILabel просто не будет автоматически настраивать размер шрифта в соответствии с шириной. И, наконец, это сделал трюк:

label.contentMode = UIViewContentModeScaleAspectFit; 

Я гугле и никто, кажется, уточнить эту деталь (каждый говорит вам, этикетка должна быть 1 линия, набор adjustsFontSizeToFitWidth/minimumFontSize и т.д.). Возможно, значение этого свойства по умолчанию изменилось? Я на iOS 4.3.

2

От Apple:

... указать значение этой маски путем объединения константы, описанные в UIViewAutoresizing с использованием C побитового оператора ИЛИ. Объединение этих констант позволяет указать, какие размеры изображения должны увеличиваться, или сжиматься относительно супервизора. Значением по умолчанию этого свойства является UIViewAutoresizingNone, что указывает на то, что не должно быть .

...Например, предположим, это свойство включает в себя UIViewAutoresizingFlexibleWidth и константы UIViewAutoresizingFlexibleRightMargin но не включает в себя UIViewAutoresizingFlexibleLeftMargin константа,, таким образом, указывает на что ширина левом поле зрения является фиксированным, но что представление в ширина и правый край может изменение. Таким образом, вид появляется привязанным к левой стороне его надзора, в то время как ширина представления и зазор справа от вида увеличиваются.

Если поведение автоматического изменения не дают точный макет, который вы потребность ваших взглядов, вы можете использовать пользовательский вид контейнера и переопределить его метод layoutSubviews позиционировать свои подвидов более точно.

Так что, если вы хотите поместить вид прикрепленный к верхней и правой стороне его надтаблицы, вы можете применить маску, как:

[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];