Не вдається змінити розмір 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.