作成中の uitableviewcell サブクラスに autolayout を使用しようとしています。レイアウト制約作成コードを配置する方法についてアドバイスをいただければ幸いです。私は周りを検索しており、見つけたすべての情報は、viewDidLoad メソッドでサブビューを追加した後に制約を追加することについて語っています。私の知る限り、viewDidLoad は uitableviewcell サブクラスのオプションではありません。
インターフェイスビルダーを使用してカスタムセルを作成し、コードに動的に割り当てています。特別なことは何もありません... uitableviewcell をサブクラス化して、セルにカスタム uiview を追加できるようにします。繰り返しますが、特に地球を粉砕するものは何もありません...インターフェースビルダーでセルに追加したラベルに対してカスタムuiviewを配置しようとすると、私の困難が生じます。
これは、カスタム 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 に配置すると、配置が適用されます。しかし、私はそれが間違った場所であると確信しています。コードは次のとおりです。
- (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];
}
このコードがどこに行くべきか誰か教えてもらえますか? 確かに、レイアウトが発生するたびに重複した制約を作成しています。
ありがとう