#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 Одновременная анимация сотен пользовательских просмотров может привести к снижению производительности. Я предлагаю вам провести простой тест и попробовать его на себе. Не должно быть так сложно проверить, сработает это или нет.