2016-04-15 1 views
2

Я хочу получить UILabel ограничения из UIView, но я не могу получить никаких ограничений. Я установил ограничения в CustomView.m так:Как получить ограничения от UIView Programmatically

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     _titleLabel = [UILabel new]; 
     [self addSubview:_titleLabel]; 
    } 
    return self; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    _titleLabel.translatesAutoresizingMaskIntoConstraints = NO; 
    NSLayoutConstraint *titleLabelBottom = [NSLayoutConstraint constraintWithItem:_titleLabel 
               attribute:NSLayoutAttributeBottom 
               relatedBy:NSLayoutRelationEqual 
               toItem:self 
               attribute:NSLayoutAttributeCenterY 
              multiplier:1 
               constant:0]; 
    [self addConstraints:@[titleLabelBottom]]; 

    ...more code 

} 

в ViewController.m

CustomView *view = [CustomView alloc] initWithFrame:viewFrame]; 
NSLog(@"%@",view.titleLabel.constraints); // nil 
+1

'layoutSubviews:' вызывается много раз, и вы всегда создаете новое ограничение. Переместите создание ограничения в ваш инициализатор – tgyhlsb

ответ

2

вы можете получить ограничения в NSArray как,

NSArray *constraintArr = self.backButton.constraints; 
NSLog(@"cons : %@",constraintArr); 

И вы можете установить экземпляр переменная типа,

NSLayoutConstraint *titleLabelBottom;

, а затем используйте

titleLabelBottom = [NSLayoutConstraint constraintWithItem:_titleLabel 
              attribute:NSLayoutAttributeBottom 
              relatedBy:NSLayoutRelationEqual 
              toItem:self 
              attribute:NSLayoutAttributeCenterY 
             multiplier:1 
              constant:0]; 
[self addConstraints:@[titleLabelBottom]]; 

так, вы можете использовать titleLabelBottom в любом месте в классе.

надеюсь, что это поможет :)

+0

, он возвращает ограничения, которые помещаются внутри этого представления. Например, если у вас есть ограничение '' 'height = 0.5 * superview.height''' - вы не увидите его в этом массиве –

1

Вы получаете ноль, потому что ограничение не создан.

Попробуйте войти свои ограничения в:

- (void)viewDidLayoutSubviews; 

Assumming это ограничение имеет важное значение для вашего CustomView, вы должны создать это ограничение в вашем методе метод initWithFrame.

 Смежные вопросы

  • Нет связанных вопросов^_^