2014-09-30 2 views
0

Я использую пользовательский UITableViewCell в своем приложении, и все работает нормально, пока я не начал использовать iOS 8. Весь мой собственный класс уменьшает ширину строк таблицы, поэтому я получаю некоторый запас слева и справа от экрана iPhone.Ошибка при использовании пользовательских объектов UITableViewCell в iOS 8

Вот интерфейс для моего класса:

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell 

@end 

В реализации, у меня есть метод setFrame, который добавляет поля слева и справа от ячейки, например так:

@implementation CustomCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

// reduce cell width to add margins 
- (void)setFrame:(CGRect)frame { 
    frame.origin.x += 10; 
    frame.size.width -= 2*10; 
    [super setFrame:frame]; 
} 

@end 

Вышеупомянутый подход отлично работает на iOS 7.1. Я могу пролистнуть одну из строк в UITableView слева, чтобы открыть кнопку «Удалить». Этим жестом пальца не подвержены остальные строки. Когда я нажимаю на строку под ударом, кнопка удаления исчезает, и строка возвращается в нормальное положение.

В iOS 8, когда я прокручиваю одну строку влево, чтобы открыть кнопку «Удалить», кажется, что меняются виды для всех строк. Кроме того, кажется, что блок внутри метода setFrame выполняется снова и снова, когда мы прокручиваем строку влево, а не только для текущей строки. Это создает полный беспорядок представлений для всех видимых строк в таблице.

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

Кто-нибудь испытал это поведение в iOS 8? Есть ли лучший способ добавить поля?

ответ

0

Комментарий Владимира Shutyuk на this thread решить мою проблему:

Если кто-то имеет проблемы с этим раствором при пролистывании удалить сдвигает весь раздел строк, попробуйте установить жёстко прописанные ширину на третьей линии. Это помогло мне. - Владимир Shutyuk 1 сентября в 9:33

Я просто жестко закодированы ширины параметра в методе setFrame:

// reduce cell width to add margins 
- (void)setFrame:(CGRect)frame { 
    frame.origin.x += 10; 
    frame.size.width = 300; // hard-code width here 
    [super setFrame:frame]; 
} 
0

Одним лучшим решением было бы оставить рамку ячейки самостоятельно и модифицировать contentView

- (void)layoutSubviews { [super layoutSubviews]; self.contentView.frame = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(0, 10, 0, 10)); }

Убедитесь, что вы добавляете пользовательские подвидов к contentView не клетки view или это не поможет. Обычные подзоны ячеек (метки и т. Д.) Уже находятся там.