Этот cra sh произошел только на iOS 10.2.1, другие устройства или симуляторы в порядке. Поскольку у меня нет iOS 10.2.1 устройства или симулятора, невозможно воспроизвести.
Здесь Cra sh Log (ссылка на Github).
То, что я сделал, это выборка данных с сервера и reloadData
на UITableView
. Разбился пока reloadData
. Все операции находятся в блоке основной очереди.
Некоторый код в UITableViewCell
, как показано ниже:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self.contentView addSubview:self.avatarImageView];
[self.contentView addSubview:self.messageBackgroundView];
[self.messageBackgroundView addSubview:self.messageTextView];
}
return self;
}
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}
- (void)prepareForReuse {
[super prepareForReuse];
[self.messageBackgroundView mas_remakeConstraints:^(MASConstraintMaker *make) {
}];
}
- (void)updateConstraints {
[self.avatarImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(38, 38));
make.top.equalTo(self.contentView.mas_top).offset(9).priorityHigh();
if (self.myself) {
make.trailing.equalTo(self.contentView.mas_trailing).offset(-18);
} else {
make.leading.equalTo(self.contentView.mas_leading).offset(18);
}
}];
[self.messageBackgroundView mas_remakeConstraints:^(MASConstraintMaker *make) {
if (self.myself) {
make.trailing.equalTo(self.avatarImageView.mas_leading).offset(-9);
make.leading.mas_greaterThanOrEqualTo(self.contentView.mas_leading).offset(44);
} else {
make.leading.equalTo(self.avatarImageView.mas_trailing).offset(9);
make.trailing.mas_lessThanOrEqualTo(self.contentView.mas_trailing).offset(-44);
}
make.top.equalTo(self.avatarImageView.mas_top);
make.bottom.equalTo(self.contentView.mas_bottom).offset(-9).priorityHigh();
}];
[self.messageTextView mas_updateConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.messageBackgroundView).insets(UIEdgeInsetsMake(8, 14, 8, 14));
make.height.equalTo(@(self.textViewHeight));
}];
[super updateConstraints];
}
- (void)setMessage:(GWBaseModel *)message {
_message = message;
// ... update ui, set height for textview
[self setNeedsUpdateConstraints];
}