Я пытаюсь получить следующую компоновку программно:
Это подкласс UIView, на котором я хотел бы разместить UILabel с фиксированной высотой (40 пикселей), динамической шириной (ширина рассчитывается на основе длины текста, поэтому я думаю, что это можно считать фиксированной, а не динамический, потому что я вычисляю его только один раз) и ровно 40 пикселей слева и снизу.
Вот мой код:
- (UIView *) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
marginGeneral = 40.0f;
UILabel *titleLabel = [[UILabel alloc] init];
[titleLabel setTranslatesAutoresizingMaskIntoConstraints: NO];
titleLabel.backgroundColor = [UIColor blackColor];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.text = @"Some Text";
[self addSubview:titleLabel];
NSLayoutConstraint *contsTitleLeft = [NSLayoutConstraint
constraintWithItem: titleLabel
attribute: NSLayoutAttributeLeft
relatedBy: NSLayoutRelationEqual
toItem: self
attribute: NSLayoutAttributeLeft
multiplier: 1.0
constant: marginGeneral];
NSLayoutConstraint *contsTitleRight = [NSLayoutConstraint
constraintWithItem: titleLabel
attribute: NSLayoutAttributeRight
relatedBy: NSLayoutRelationEqual
toItem: self
attribute: NSLayoutAttributeRight
multiplier: 1.0
constant: marginGeneral * -1.0f];
NSLayoutConstraint *contsTitleBottom = [NSLayoutConstraint
constraintWithItem: titleLabel
attribute: NSLayoutAttributeBottom
relatedBy: NSLayoutRelationEqual
toItem: self
attribute: NSLayoutAttributeBottom
multiplier: 1.0
constant: marginGeneral * -1.0f];
NSLayoutConstraint *contsTitleHeight = [NSLayoutConstraint
constraintWithItem: titleLabel
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
constant: 40.0f];
[self addConstraints:@[contsTitleLeft, contsTitleRight, contsTitleBottom]];
[titleLabel addConstraint:contsTitleHeight];
}
return self;
}
@end
Это, конечно, возвращает все виды предупреждений, связанных с ограничениями, и метка не отображается.
Не могли бы вы, милые люди, помочь мне понять, где я ошибся и как это исправить? Большое спасибо!
P.s .: Я не использую конструктор интерфейса, так что это не вариант. :)