Равномерное распределение букв на этикетке независимо от размера букв

#iphone #ios #uilabel

#iPhone #iOS #uilabel

Вопрос:

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

Я бы хотел, чтобы эти буквы были равномерно распределены как по горизонтали, так и по вертикали, независимо от того, какая на самом деле буква. i и y имеют разную ширину, а o и b — разную высоту. То, что я ищу, — это иметь таблицу, в которой каждая буква занимает одну ячейку.

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

Есть ли способ указать отдельным буквам в UILabel занимать x ширину независимо от ширины фактической буквы?

Есть ли лучший элемент управления или представление в iOS для построения матрицы букв и сохранения возможности перемещать ее вертикальные линии по отдельности?

Ответ №1:

Очень быстрый ответ: Используйте шрифт фиксированной ширины, например Courier, в котором все буквы расположены равномерно.

Комментарии:

1. Хорошее предложение. Не уверен, правда, насколько хорошо это подойдет любителям Apple, чувствительным к дизайну, но мы попробуем 🙂

2. Мое, вероятно, не лучшее решение, просто самое быстрое. Если вы предпочитаете использовать представление для каждой буквы, помните, что Apple рекомендует не более 3 вложенных представлений на ячейку табличного представления. Еще немного, и прокрутка начнет становиться прерывистой. Ознакомьтесь с документами, особенно с «Более пристальным взглядом на ячейки табличного представления», о том, как создать подкласс UITableViewCell.

Ответ №2:

Вам определенно следует подумать о программном способе. Если вы делаете это с помощью interface-builder, вы делаете именно то, для чего он не предназначен: дорогостоящие приключения с наведением и щелчком мыши!

Просто создайте UILabel определенного размера, создайте next, next, next, next, а затем переходите к следующей строке. Надеюсь, мне не нужно объяснять вам, как это работает. И имейте в виду, что вы создаете их в loadView !!!! ^^

Комментарии:

1. @weggingho, спасибо за ответ. Мы создаем это представление пограмматическим способом…

Ответ №3:

  • Создайте одну UILabel для каждой буквы
  • Сделайте все этикетки одинаковой ширины и высоты
  • Установите для textAlignment значение UITextAlignmentCenter
  • Равномерно распределите их в своей сетке

Комментарии:

1. Спасибо за предложение, мы попробуем. Знаете ли вы, как создание нескольких сотен этикеток повлияет на производительность? Не уверен, окажет ли это какое-либо влияние вообще, но если у вас есть какой-либо опыт в этой области, хотелось бы услышать!

2. @gyurisc, я не думаю, что это будет проблемой. Я не использовал так много ярлыков, но заполнение экрана множеством просмотров не проблема (если вы не пытаетесь их анимировать или что-то в этом роде). Попробуйте!

3. К сожалению, анимация является ключевой в нашем случае.

4. @gyurisc Одновременная анимация сотен пользовательских просмотров может привести к снижению производительности. Я предлагаю вам провести простой тест и попробовать его на себе. Не должно быть так сложно проверить, сработает это или нет.