2012-07-03 1 views
0

У меня есть UIView, который содержит два объекта UILabel, которые заполнены программно. Я хочу, чтобы левый UILabel был выровнен по правому краю, а правый UILabel - влево. Это мое довольно ASCII представление:Получение двух соседних UILabels для выравнивания по внутреннему краю

___________________ 
| ______ ______ | 
| | ASDF| |ASDF | | 
| |______| |______| | 
|___________________| 

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

Контейнер UIView нуждается в UIViewAutoResizingFlexibleWidth, чтобы он мог расширяться, чтобы соответствовать этикеткам с переменной шириной. Как слева, так и справа UILabel необходимо UIViewAutoResizingFlexibleWidth, чтобы они расширялись, чтобы соответствовать содержимому с переменной шириной. Левому UILabel требуется UIViewAutoresizingFlexibleRightMargin, так что левое поле остается фиксированным. Правило UILabel нуждается в UIViewAutoresizingFlexibleLeftMargin, так что правый край остается фиксированным.

Концептуальные проблемы с этой реализации:

  • Как тексты расширяются, они могли бы просто расширить друг на друга, как бы по-прежнему подходят контейнер

меня возникли проблемы перекрытия, а также так как правый край, похоже, не фиксируется, как предполагается, скорее всего есть большой пробел на правой стороне.

Кто-нибудь знает, что может быть решением?

ответ

0

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

Плюс, не должна ли левая этикетка быть UIViewAutoresizingFlexibleLeftMargin и наоборот? наоборот.

0

Два наблюдение:

  1. AutoresizingMasks не расширяет представление, основанное на изменение подвидов, в режиме просмотра, а скорее на основе изменения в надтаблицах. Здесь это не представляет интереса. Это, как правило, более полезно для таких вещей, как, когда супервизор изменяет размеры в результате изменений ориентации. Существуют и другие ситуации, которые вы могли бы теоретически использовать autoresizingMasks, но я не думаю, что это один из них.

  2. Более логично, вы можете просто рассчитать ширину текстовых меток, необходимых для соответствия требуемому тексту, а затем соответствующим образом установить рамку UILabel.

Чтобы рассчитать размер двух текстовых меток, как только вы установите их свойства текста, могли бы сделать что-то вроде:

CGSize leftSize = [leftLabel.text sizeWithFont:leftLabel.font forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 
CGSize rightSize = [rightLabel.text sizeWithFont:rightLabel.font forWidth:self.view.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

Теперь, когда вы знаете размер двух меток, вы можете настроить рамка двух этикеток, а также их надзор, соответственно.

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

  • Нет связанных вопросов^_^