2014-09-18 4 views
3

У меня есть подкласс UITableViewCell, и я переопределяю setFrame:, чтобы добавить вставки в ячейку. В iOS 7 все работает нормально, на iOS 8, с другой стороны, представление таблицы загружает ячейки правильно, но когда я обновляю таблицу, ячейки меняются. Комментируя код в setFrame, tableview ведет себя правильно, но я также теряю вставки. Кто-нибудь испытал это?Изменение размера ячейки iOS 8

UPDATE: AFAIK, в iOS 8 высота ячейки соответствует высоте строки.

+0

Я не испытал этого, но есть очень хорошая статья о изменении размеров ячеек, надеюсь, это поможет http://www.appcoda.com/self-sizing-cells/ – DevC

+0

Я испытываю такое же поведение. Когда я переключаю свой рабочий стол между редактированием и нормальным режимом, вставки будут добавлены на frame.size.width, поэтому при каждом переключении в режим редактирования табличная ячейка становится все меньше. – HashtagMarkus

ответ

3

Я не знаю, почему поведение изменилось в iOS 8, но я нашел обходное решение.

В моем случае я изменил сообщение setFrame на следующее:

-(void) setFrame:(CGRect) frame { 
    frame.origin.x += TABLE_PADDING; 
    frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING); 
    [super setFrame: frame]; 
} 

Так я использую SuperView boundings для расчета. Однако это может не работать в любом случае ...

Я столкнулся с другой проблемой при переупорядочивании ячейки.

В случае, если вы переназначения попробовать это:

-(void) setFrame:(CGRect) frame { 

    if(isDragging) 
     frame.origin.x = self.supervire.frame.origin.x + TABLE_PADDING; 
    else 
     frame.origin.x += TABLE_PADDING; 

    frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING); 
    [super setFrame: frame]; 
} 

Чтобы получить информацию, если TableCell тащит я использовал решение, предложенное в этом вопросе: How to get notified of UITableViewCell move start and end

Edit я столкнулся с более и больше проблем с сообщением setFrame, поэтому я решил НЕ использовать стандартный TableViewController. Теперь я использую стандартный ViewController с панелью поиска и контроллером отображения поиска. И таблица View внутри контроллера View. Таким образом, я могу использовать ограничения автоопределения для настройки ширины таблицы. Это кажется лучшим решением для моего случая, так как я не мог найти способ заставить его работать (в любом случае) с помощью сообщения setFrame.

+0

Я столкнулся с этой же проблемой, но я также устанавливаю высоту кадра. Он по-прежнему сокращается при перезагрузке. Я не могу использовать superiew.frame, потому что это будет высота всего экрана. Как я могу это сделать? – Jonathan

0

я частично решить мою проблему, переместив код из setFrame в layoutSubviews и вместо того, чтобы использовать self.frame, я использую свойство сохраненного в awakeFromNib где я держу свои границы:

- (void)layoutSubviews 
{ 
[super layoutSubviews]; 
    CGRect bounds = self.cellBounds; 
    CGRect boundsWithInsets = CGRectMake(bounds.origin.x + horizontalPadding, 
             bounds.origin.y + verticalPadding, 
             bounds.size.width - 2 * horizontalPadding, 
             bounds.size.height - 2 * verticalPadding); 
    [super setBounds:boundsWithInsets]; 
} 

Проблема возникает снова, когда я проведите по экрану, чтобы войти в режим редактирования, и все мои ячейки потеряли их левое заполнение (как упоминалось @ Zerd1984)

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

4

У меня есть аналогичная проблема.

решить ее:

- (void)setFrame:(CGRect)frame 
{ 
    NSInteger inset = kDefaultViewPadding; 
    frame.origin.x += inset; 
    frame.size.width = kMainScreenWidth - 2*inset; 

    [super setFrame:frame]; 
} 

где

#define kMainScreenWidth   ([[UIScreen mainScreen] bounds].size.width) 

,

не используйте код, как:

frame.origin.x += TABLE_PADDING; 

или

frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING); 

В противном случае, каждый раз, когда обновляется таблица, ширина ячейки уменьшается (2.0f * TABLE_PADDING).

+0

Наконец, решение, которое работает! – tsuz

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