Как настроить подвиды моего подкласса UITableViewCell для использования масок авторазмера? - PullRequest
0 голосов
/ 16 декабря 2011

Я пытаюсь реализовать сетку (например. DataGridView .NET) для моего приложения iOS. Я использую UITableView с пользовательским подклассом UITableViewCell, в котором у меня есть несколько меток, представляющих каждый столбец данных для этой строки. Мой вопрос касается изменения ширины этих меток после изменения ориентации устройства. Я в основном хочу пропорционально изменить их размер, чтобы, например, столбец, занимающий 1/3 ширины сетки в портретной ориентации, по-прежнему занимал 1/3 ширины при переключении в альбомную ориентацию.

Прямо сейчас я достигаю этого, переопределяя метод - (void)layoutSubviews моего подкласса UITableViewCell; Я просто жестко кодирую соотношение iPad и iPhone в альбомной ориентации. Однако это работает только в том случае, если размер самой сетки пропорционально изменяется при изменении ориентации, что, конечно, не всегда так.

Чтобы найти решение, которое будет работать в любом случае, я думал об использовании self.bounds.size.width в методе layoutSubviews, но кажется, что автоматическое изменение размера масок - лучшее решение. Если я установлю маску каждой UILabel на UIViewAutoResizingFlexibleWidth | UIViewAutoResizingFlexibleLeftMargin | UIViewAutoResizingFlexibleRightMargin, тогда я достигну того типа масштабирования, который ищу. Однако я не могу понять, как установить начальные кадры каждой метки. Если я не знаю начальных границ ячейки, пока не будет вызван layoutSubviews, как я могу организовать свои подпредставления для начала?

1 Ответ

0 голосов
/ 25 января 2012

Попробуйте использовать self.contentView.bounds.size в качестве основы для своих расчетов.Например:

int numberOfLabels = 3;
CGFloat marginHorizontal = 10;
CGFloat spacingHorizontal = 8;
CGFloat totalWidth = cell.contentView.bounds.size.width;
// That's how much is available to all labels 
CGFloat availableWidth = (totalWidth
                          - 2 * marginHorizontal
                          - (numberOfLabels - 1) * spacingHorizontal);
// That's how much each label gets - initially!
CGFloat labelWidth = availableWidth / numberOfLabels;

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

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

  • Левый край: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin
  • Правый край: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...