где создать ограничения автоматического размещения для подкласса uitableviewcell?

Я пытаюсь использовать autolayout для создаваемого подкласса uitableviewcell, и я был бы признателен за несколько советов о том, какой метод поместить код создания ограничения макета. Я искал вокруг, и вся информация, которую я нахожу, говорит о добавлении ограничений после добавления подпредставлений в методе viewDidLoad. Насколько я знаю viewDidLoad неОпция для подкласса uitableviewcell.

Я использую конструктор интерфейса для создания пользовательской ячейки и динамически размещаю ее в своем коде. Ничего особенного там нет ... Я подклассифицирую uitableviewcell, чтобы я мог добавить пользовательский uiview в ячейку. Опять же, ничего особенного не происходит. Моя трудность возникает, когда я пытаюсь расположить свой пользовательский интерфейс относительно метки, которую я добавил в ячейку в конструкторе интерфейса.

Это код для создания пользовательского интерфейса и добавления его в ячейку.просмотр содержимого:

- (id)initWithCoder:(NSCoder *)decoder
{
    if ((self = [super initWithCoder:decoder]))
    {
        [self initSelf];
    }
    return self;
}

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

- (void) initSelf
{
    // Initialization code
    _badgeLabel = @"";

    if (!_customBadge)
    {
        _customBadge = [CustomBadge customBadgeWithString:self.badgeLabel];
    }

    // hide the badge until needed
    self.customBadge.hidden = YES;

    // add badge to the cell view hierarchy
    [self.customBadge setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.customBadge setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
    [self.customBadge setContentHuggingPriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical];

    [self.contentView addSubview:self.customBadge];
}

Если я добавлю код ограничения в конце initSelf, то ничего не произойдет. Положение моего _customBadge остается на своем дефолт. Когда я помещаю код ограничения в layoutSubviews, применяется позиционирование; но я уверен, что это не то место. Вот's код:

- (void) layoutSubviews
{
    [self.contentView addConstraint:[NSLayoutConstraint
                                     constraintWithItem:self.customBadge
                                     attribute:NSLayoutAttributeLeft
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:self.competence
                                     attribute:NSLayoutAttributeRight
                                     multiplier:1.0
                                     constant:-14.0]];

    [self.contentView addConstraint:[NSLayoutConstraint
                                     constraintWithItem:self.customBadge
                                     attribute:NSLayoutAttributeTop
                                     relatedBy:NSLayoutRelationEqual
                                     toItem:self.competence
                                     attribute:NSLayoutAttributeTop
                                     multiplier:1.0
                                     constant:0.0]];

    [super layoutSubviews];
}

Может кто-нибудь сказать мне, где этот код должен идти? Конечно, я создаю дублирующиеся ограничения каждый раз, когда происходит макет.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос