Автоматический масштабирование Ресурсов в UIView

StackOverflow https://stackoverflow.com/questions/2128961

  •  22-09-2019
  •  | 
  •  

Вопрос

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

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

Редактировать:

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

Это было полезно?

Решение

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

Другие советы

Я нашел этот пост полезным для понимания автоматического изменения размера iOS.

http://www.techotopia.com/index.php/IOS_4_iPhone_Rotation,_View_Resizing_and_Layout_Handling

От Apple:

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

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

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

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

[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];

superview имеет такие параметры как ContentMode и autoresizeSubviews, который все с автоматическое изменение размераМаска из его подпредставлений приводит к изменению размера

Читайте внимательно http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

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

label.contentMode = UIViewContentModeScaleAspectFit;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top