Задание координат и размеров элемента управления CocoaTouch без использования Interface Builder - PullRequest
1 голос
/ 29 декабря 2010

Я только начинаю разработку под iOS, но не могу использовать мышь, потому что я слепой и использую Voiceover на устройствах Mac и iOS. В этом конкретном случае я не могу заставить кого-то спроектировать пользовательский интерфейс для меня, поэтому хочу сам выложить 9 элементов управления для представления - ничего сложного, только в 3 ряда.

Я не могу сделать это самостоятельно в Интерфейсном Разработчике, поскольку это требует использования мыши для создания соединений и для перетаскивания элементов управления из библиотеки в представление. Итак, я создал пользовательский интерфейс в коде, и это работает.

Но теперь я хочу выложить элементы управления:

  • UILabel с UITextField рядом с ним
  • Под ней две UILabel и две UIB-кнопки.
  • есть еще пара элементов управления - я просто хочу показать, что это простой пользовательский интерфейс.

Есть ли у кого-нибудь какие-либо советы или практические правила, которые можно использовать для размещения этих элементов управления в представлении. Каждый элемент управления инициализируется с синтаксисом, подобным приведенному ниже:

inputField = [[UITextField alloc] initWithFrame:CGRectMake(x, y, width, height)];

Я часами занимался математическими вычислениями в своей голове и пытался получить разумный набор значений для x / y / width / height с промежуточными результатами. Советы от тех, кто делал это раньше, будет очень признателен.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2010

В конце концов, после общения с разными людьми и дальнейших исследований, я нашел лучшее, но все же неоптимальное решение. ключевой частью информации, которой мне не хватало, было сообщение SizeToFit об объектах UILabel.

Теперь я сначала создаю все метки, устанавливаю их текст и использую SizeToFit для автоматического расчета ширины / высоты. В случае кнопок я также создаю метки и устанавливаю метку в качестве заголовка кнопки.

Далее я программно вычисляю ширину для всех TextFields на основе меток и значений для полей / отступов:

  • Предположим, я хочу метку с текстовым полем рядом с ней.
  • Я создаю метку и использую SizeToFit.
  • Я определяю переменные margin = 10 и padding = 5 (исследую, какими они должны быть)
  • тогда ширина текстового поля равна totalWidth-2 * margin-myLabel.frame.size.width-padding
  • значение x для метки равно simly margin, а значение x для текстового поля равно margin + myLabel.frame.size.width + padding
  • Пока я жестко кодирую высоту текстовых полей в 20, но опять-таки это будет уточнено.

Я сделал это вики-сообществом, если у других есть улучшения в этом подходе.

0 голосов
/ 29 декабря 2010

Я обычно получаю точные координаты, используя пустое представление IB, просто чтобы получить правильные #, а затем вставляю их в код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...