it-swarm.com.ru

Автоматическое изменение размера масок программно по сравнению с Interface Builder/xib/nib

У меня было (вероятно, ложное) предположение, что включение индикатора правильного поля в xib эквивалентно использованию UIViewAutoresizingFlexibleLeftMargin внутри кода и так далее.

Итак, я привык думать по этому снимку: enter image description here

Позже сегодня мне пришлось перепроверить и наткнулся на эту ветку.

А также документация Apple, озаглавленная разделом с заголовком - «Автоматическая обработка изменений макета с использованием правил автоматического изменения размера» по этой ссылке: https://developer.Apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/ Создание Views/Создание Views.html

Так что теперь у меня есть обновленная концепция о том, как программная установка масок автоматического изменения размера будет эквивалентна настройкам XIB:

Сценарий 1: Установка только (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) эквивалентна:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

В XIB?

Сценарий 2: Установка (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin) в коде эквивалентна:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

В XIB?

Верны ли мои 2 обновленных сценария? Я сейчас в моем понимании?

216
Raj Pawan Gumdal

Да, в Интерфейсном Разработчике он в некотором смысле «перевернут» (или UIView, в зависимости от того, как вы на это смотрите). Ваши приведенные "сценарии" верны.

35
DarkDust

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

Возможно, вы захотите использовать макрос препроцессора UIViewAutoresizingFlexibleMargins, когда поле UIView будет гибким во всех направлениях. Я поместил это в предварительно скомпилированный заголовочный файл, чтобы он был включен везде.

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

Использование UIViewAutoresizingFlexibleMargins сделает элемент пользовательского интерфейса центрированным, поскольку он НЕ будет обниматься ни с одной стороны. Чтобы элемент увеличивался/уменьшался со своим родителем, установите соответственно UIViewAutoresizingFlexibleWidth и UIViewAutoresizingFlexibleHeight

Мне нравится использовать UIViewAutoresizingFlexibleMargins, потому что позже я могу ссылаться на него следующим образом:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

вместо

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

Все часто я вижу эти поля ИЛИ вместе в одной строке, как в примере выше. Просто трудно читать.

47
Sam

Swift 4 Использовать это

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Objective-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
0
Muhammad Nayab

 enter image description here

Включение вертикальной/горизонтальной стрелки (называемой пружиной) внутри поля сделает высоту/ширину гибкой. Но включение внешней строки (называемой strut) сделает эту сторону негибкой/негибкой.

Включение внешней левой строки (левая стойка) не эквивалентно включению UIViewAutoresizingFlexibleRightMargin. Вместо этого UIViewAutoresizingFlexibleRightMargin = on, если правая распорка отключена, off, если правая распорка включена.

Сначала это довольно запутанно, но если вы внимательно посмотрите, есть разница в пружинах и стойках. Я не знаю, почему Apple это сделала, но для меня были случаи, когда было проще пользоваться. А использование противоположных свойств в коде еще более запутанно.

0
Abdurrahman Mubeen Ali