Как установить размер / положение пользовательского UIView для его размещения в пользовательском UITableViewCell? - PullRequest
1 голос
/ 23 марта 2011

Как мне установить размер подпредставления, которое программно помещается в UITableViewCell?

У меня есть пользовательский (подклассифицированный) UITableViewCell, в котором часть ячейки содержит количество строк (динамических), которыереализованы как пользовательский UIView.Идея состоит в том, чтобы создать пользовательское представление (которое представляет собой строку элементов), а затем, когда UITableViewCell попадет в layoutSubviews, он (а) настроит свое позиционирование и (b) выполнит цикл и вызовет «layoutSubviews» в каждой из строкпользовательские UIViews, которые он использует для строк.

Вопрос - Я не уверен, как правильно установить размер / положение пользовательской строки UIView?Как мне в пользовательском методе UIView layoutSubviews определить его x, y, width, height, чтобы я мог его позиционировать?

Нужно ли мне, например, вручную, в методе layoutSubviews UITableCellView, проходить по всем строкам и вызывать их собственный метод, чтобы передать им их положение / ширину / высоту, в которых они должны быть?Затем, когда будет вызван метод layoutSubview пользовательской строки UIView, он узнает, ищет ли она переменную экземпляра, в которой хранятся эти значения, чтобы использовать их?

Надеюсь, это имеет смысл.

Структура:

Динамический пользовательский UITableCellView (в подклассе)

  • определяет rowHeight динамическив heightForRowAtIndexPath
  • в layoutSubviews он включает циклический просмотр подпредставлений (у меня есть пользовательский UIView) и вызывает layoutSubview для каждого из этих

В пользовательском UIView (который представляет собой строкуэлементы, например UILabel)

  • в layoutSubview - ВОПРОС: Как установить размер кадра этого подпредставления?
  • Я предполагаю, что x, y для кадра должно быть 0,0?
  • Для ширины / высоты как получить полный размер области суперпредставления, в которую она должна быть установлена?
  • Должен ли суперпредставитель передать эту информацию ему до макета Subviews?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2013

Вы можете добавить категорию в UIView с помощью методов изменения размера.

UIView + ResizeMethods.h

- (void) setHeight: (CGFloat) height;
- (void) setWidth: (CGFloat) width;
- (void) setTop: (CGFloat) top;
- (void) setLeft: (CGFloat) left;

UIView + ResizeMethods.m

- (void) setHeight: (CGFloat) height {
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;
}
- (void) setWidth: (CGFloat) width {
    CGRect frame = self.frame;
    frame.size.width = width;
    self.frame = frame;
}
- (void) setTop: (CGFloat) top {
    CGRect frame = self.frame;
    frame.origin.y = top;
    self.frame = frame;
}
- (void) setLeft: (CGFloat) left {
    CGRect frame = self.frame;
    frame.origin.x = left;
    self.frame = frame;
}
1 голос
/ 24 марта 2011

любые представления, добавленные как часть подкласса tableViewCell, располагаются относительно фрейма ячеек, то есть x: 0, y: 0 для источника подпредставления, будет верхним левым углом tableCell. Что-то вроде этого должно быть достаточно, чтобы вы начали.

CGRect frame =[self frame];
frame.size.height=20.0f;
frame.origin.x=(self.frame.size.height/2)-frame.size.height;
frame.origin.y=0.0f;
[subview setFrame:frame];
...