Ошибка прокрутки ограничений UITableViewCell с UITextView

#ios #objective-c #uitableview #ios-autolayout

#iOS #objective-c #uitableview #ios-автозапуск

Вопрос:

У меня есть подкласс UITableViewCell и использование Masonry для настройки ограничений зависит от моего стиля ячейки (enum). Например, у меня есть правильная оболочка с несколькими кнопками, и иногда я хочу использовать исключенный путь для моего UITextView , когда ширина моей оболочки не равна нулю. Все работает хорошо только после прокрутки вниз до этой ячейки и повторной прокрутки вверх и вниз. С первой попытки у меня

И после прокрутки вверх и вниз у меня есть

введите описание изображения здесь

 - (void)setCellType:(ReservationCellType)cellType
{
    self->_cellType = cellType;
    CGFloat rightButtonsWrapperWidth = 0;
    CGFloat rightButtonsWrapperHeight = 0;
    if (cellType == ReservationCellTypeSeating) {
        if (self.reservationStatus == ReservationStatusArrived) {
            rightButtonsWrapperWidth = 100.f;
            rightButtonsWrapperHeight = 100.f;
        } else {
            rightButtonsWrapperWidth = 0;
            rightButtonsWrapperHeight = 0;
        }
    }

    [self.rightButtonsWrapper mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.width.mas_equalTo(rightButtonsWrapperWidth);
        make.height.mas_equalTo(rightButtonsWrapperHeight);
    }];

    if (cellType == ReservationCellTypeSeating) {
        if (self.reservationStatus == ReservationStatusArrived) {
            [self addRightButtonsWrapperExcludedPathWidth:rightButtonsWrapperWidth height:rightButtonsWrapperHeight];
        }
    }

}
  

Код addRightButtonsWrapperExcludedPathWidth:height:

 - (void)addRightButtonsWrapperExcludedPathWidth:(CGFloat)width height:(CGFloat)height
{
    CGRect frame = CGRectMake(CGRectGetMinX(self.rightButtonsWrapper.frame), CGRectGetMinY(self.rightButtonsWrapper.frame), width, height);
    CGRect rightWrapperExclusionRect = [self.noteTextView convertRect:frame fromView:self.wrapper];
    UIBezierPath *rightWrapperExcludedPath = [UIBezierPath bezierPathWithRect:rightWrapperExclusionRect];
    self.noteTextView.textContainer.exclusionPaths = @[rightWrapperExcludedPath];
    [self.wrapper layoutIfNeeded];
}
  

cellForRowAtIndexPath: Я звоню [cell layoutIfNeeded] ; Помогите мне, пожалуйста. И второй вопрос — мои вычисления всегда ошибочны, прежде чем я вызываю reloadData. И после некоторой прокрутки у меня возникло много проблем с компоновкой. Пожалуйста, помогите мне.

Комментарии:

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

2. @ReinierMelian это не помогает 🙁