Не вдається змінити розмір UIView в IB


88

Можливо, щось просте, але я не можу зрозуміти, чому я не можу змінити розмір UIView в xib в Interface Builder.

Я створив нове представлення XIB у xcode та в інспекторі розмірів, ширина та висота відключені та сірі до 320 на 460. Це дивно, оскільки я можу змінити розмір для інших двох подань (пов'язаних з двома іншими панелями вкладок пунктів).

Я не впевнений, що це має щось спільне, але нещодавно я оновив SDK до 3.

Дякую!

Відповіді:


81

Я думаю, що ви не можете редагувати розмір, імітуючи будь-які елементи інтерфейсу користувача, такі як рядок стану в Interface Builder. Ви можете спробувати вимкнути змодельовані елементи, якщо такі включені. Не зовсім впевнений, чому це так, тому був би вдячний за відгуки всіх, хто знає, чому саме це - має бути поважна причина.


1
Дякую, це правильно. Після оновлення xcode та IB рядок стану за замовчуванням був увімкнений. В інших це вимкнено.

1
Як і в Xcode 4.2, iOS 5.0.1, це змінилося. Моя відповідь нижче пояснює, як цього можна досягти.
lol

1
Дуже корисний. Просто вимкніть рядок стану, відрегулюйте розмір, а потім знову ввімкніть рядок стану.
Wollan

9
Цей параметр працював для ViewController.xib у Xcode 4.3.3: "Імітовані показники - Розмір: вільна форма". Після цього налаштування розміру перегляду вмикається. Також видаліть опцію заповнення шкали "Режим перегляду" (трохи нижче змодельованих показників).
defvol

uuuugh Мені дуже не подобається ця IDE
Saik Caskey

80

Для того, щоб досягти цього в XCode 4.6.3 / 5.0.2, потрібно виконати знімок екрана нижче:

  1. У розділі «Інспектор файлів» -> зніміть галочку Use Auto Layout
  2. Клацніть на Селектор атрибутів & Виберіть Freeformрозмір

Це потрібно під час створення headerView для tableView

введіть тут опис зображення


40

Частина, яку ви шукаєте, знаходиться на першій панелі інспектора (Command-1). Вгорі є розділ із позначенням Імітовані елементи інтерфейсу користувача. За замовчуванням ввімкнено рядок стану. Потрібно переконатися, що для всіх трьох встановлено значення None.


2
Дякую, ці відповіді просто заощадили мені купу часу! Хтось знає, чому IB це робить?
Грегор

Дякую, друже. Я шукав його.
natanavra

Примітка для всіх, це зараз: "Не вказано" замість жодного. (У мене версія 3.2.3)
IcyBlueRose

Я підтверджую, що для iPad вказано "Не вказано", дякую Томасу Мон, ти врятував мені кілька годин: D
Qlimax

Я бачу це лише для контролерів перегляду, а не для переглядів
BigBoy1337

26

Як і в Xcode 4.2, iOS 5.0.1, за промовчанням модельовані метрики включають моделювання атрибута 'size' UIViewControllers до 'Inferred'

Якщо ви зміните цей атрибут на "Freeform", ви зможете змінити розмір UIView, що міститься в UIViewController, одночасно імітуючи рядок стану (або будь-яке інше моделювання з цього приводу)


1
Атрибут size тепер за замовчуванням має значення "Retina 4 Full screen", але зміна його на "Freeform" все ще працює.
Pier-Luc Gendreau

4

Просто перейдіть до інспектора, перейдіть до першої панелі (або натисніть команду-1), а потім змініть поля, позначені Рядок стану, Верхній рядок та Нижній рядок на Нічого, у розділі, що називається "Імітовані елементи інтерфейсу користувача". Можливо, вам доведеться клацнути маленький трикутник, щоб зробити їх видимими.


1

Смішно У мене схожа проблема. Я видалив усі подання з файлу xib і знову додав подання. Встановіть для рядка стану значення "не вказано", щоб рядок стану не містився. При додаванні подання створюється з x = 0, y = 0, w = 320 h = 460 замість (0,0320 480), як я і очікував. Змінивши висоту на 480 та підключивши її до власника файлу та змінивши колір, щоб зробити його відмінним по відношенню до фону. Я розумію, що між верхньою частиною екрана та видом була біла смуга. Я доповнив свій код за допомогою:

#define RECTLOG (rect) (NSLog (@ "" #rect @ "x:% fy:% fw:% fh:% f", rect.origin.x, rect.origin.y, rect.size.width, rect .size.height));

в viewDidLoad

- (void) viewDidLoad {
    [super viewDidLoad];
    RECTLOG (self.view.frame);
}

Виявляється, подання таким, яке завантажується з IB, насправді (0, 20, 320, 480). В якості обходу я скидаю кадр подання за допомогою self.view.frame = CGRectMake (0, 0, 320, 480);

Я використовую IB 3.2.5

Я хотів би знати про невелике виправлення цього.


3
FYI, ви можете використовувати NSStringFromCGRect (rect), щоб отримати рядок для друку, що представляє CGRect.
Беррі

Це було чудовим FYI, я перевірив це, і ви насправді можете отримати значення рядка з CGPoint і CGSize теж! дуже кухар, дякую.
FierceMonkey

1

Я помітив, що UIView, автоматично створений під час створення файлу xib, не може бути змінений на панелі розмірів або маркерних ручках.

Все, що я зробив, це додати ще один UIView і перетягнув все зі свого старого UIView на новий, а потім видалив старий.

Це вирішило проблему для мене, але так, я думаю, що є основна проблема з конструктором інтерфейсу для вирішення Apple (хтось виправте мене, якщо я помиляюся).

Я використовую інтегрований конструктор інтерфейсів XCode 4.


0

Я розібрався по-іншому ...

відкрийте свій xib за допомогою улюбленого текстового редактора та відредагуйте цей рядок

        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CompassViewController">

CompassViewController це назва вашого класу, з яким ви намагаєтеся зв'язати свій nib / xib.

Просто відредагуйте назву класу з правильною назвою класу, і все готово;)


0

введіть тут опис зображенняУ розкадровці виберіть UIVIew і перейдіть до інспектора атрибутів, змініть розмір UIVIew на "FreeForm" замість "Inferred"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.