Подтвердить что ты не робот

Ресурсы Autoresizing UIView

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

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

Edit:

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

4b9b3361

Ответ 1

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

Ответ 3

От Apple:

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

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

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

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

[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];

Ответ 5

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

label.contentMode = UIViewContentModeScaleAspectFit;

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