2013-05-18 3 views
1

Я довольно новичок в iOS dev и очень новичок в раскадровки. Я пытаюсь создать базовую форму, используя UITableView со статическими ячейками и «сгруппированным» стилем.Макет статической ячейки таблицы для iPhone и iPad

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

Так я перетащить ярлык на левую сторону моей ячейки таблицы и ввод текста на право, то я использую автоматическую раскладку и настройку некоторых ограничений: - Этикетка занимает ведущее место в надтаблицы 30 - TextField имеет косое пространство для надтаблицы от 30 - Горизонтальное расстояния ограничение между меткой и текстовым полем - равношироким ограничением на этикетке

Он прекрасно работает на iPhone, однако на IPad этикетка и в текстовом поле выходят за края ячейки таблицы. Это связано с тем, что iPad имеет более широкие поля (более широкие, чем 30pt ограничения, которые я использовал) с левой и правой стороны ячеек таблицы.

Очевидно, что это не работает. Думаю, мой вопрос в том, что это распространенный сценарий, и я подозреваю, что есть простое решение. Заинтересован услышать рекомендации. Есть ли способ ограничить метку и текстовое поле к краям ячейки, а не к краям таблицы? Если я не должен:

  1. Реплицируйте раскадровки для iPhone и IPad
  2. Используйте форму библиотеки как QuickDialog
  3. Добавить и организовать этикетки и текстовые поля Programatically
  4. Любые другие предложения?

Вот скриншот, показывающий ограничения автоматической компоновки: enter image description here

И это, как расположение ведет себя на IPad: enter image description here

ответ

3

У меня такая же проблема. Я решил это долгий путь, создавая выходы для каждого горизонтального ограничения, а затем программно меняя константу в зависимости от того, является ли текущее устройство iPad или iPhone.

заголовочный файл:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myLabelHorizontalConstraint; 

метод файл в подпрограмме viewDidLoad:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     myLabelHorizontalConstraint.constant = 60; 
} else myLabelHorizontalConstraint.constant = 30; 

Вы можете оставить из «другой» части, если ограничение в вашей раскадровке макета сцены установлено на 30, который в моем случае это настройка iPhone.Я просто положил его выше, чтобы показать полный пример.

Желательно, чтобы было более универсальное решение, такое как настройка в раскадровке где-нибудь или одна команда изменения размера. Похоже, что статическая кластерная панель iPad iPad отходит на 30 пунктов больше, чем iPhone, но не компенсирует это при автоопределении. Может быть, я чего-то не хватает.

+0

Я думаю, что это решение касается конкретной проблемы. Спасибо за отзыв Скотт. На более длинных формах настройка розетки может стать немного утомительной, но в этом случае программная компоновка может быть наилучшей в любом случае. – Bruce

1

Я предпочитаю решение 3 ^^ использовать cellForRow:atIndexPath: METHODE и там cell.titleLabel.title для вашей этикетки и добавьте UITextField с autoResizingMask (или аналогичным) flexibleWidth на ваш cell.contentView.

Или другое решение: создать пользовательские ячейки для iPhone и для IPad и загрузить это ^^ так что вы также имеют меньшие проблемы с обработкой текстовых полей: P Если вам нужна дополнительная помощь в этом или есть вопросы, просто комментарий :)

+0

Я сейчас склоняюсь к этому решению, так как не могу найти супер-удобный способ сделать это с помощью автоматической компоновки. Благодарю. – Bruce

Смежные вопросы