NSTextField And AutoLayout: Autogrow height -> Programmatically

前端 未结 2 1133
执笔经年
执笔经年 2021-01-20 10:42

If I create a label in interface builder and set a string through code that does not fit its current size, the label will grow vertically to fit its size, great!. Besides th

2条回答
  •  梦毁少年i
    2021-01-20 11:07

    Set the text field's preferredMaxLayoutWidth. I think you then don't want or need the explicit width constraint.


    In my testing, I find that this works:

    self.label = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 18)];
    self.label.translatesAutoresizingMaskIntoConstraints = NO;
    [self.label.cell setLineBreakMode:NSLineBreakByWordWrapping];
    self.label.stringValue = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    self.label.preferredMaxLayoutWidth = 100;
    self.label.editable = NO;
    
    [self.window.contentView addSubview:self.label];
    
    NSDictionary* views = @{ @"label" : self.label };
    [self.label.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]" options:0 metrics:nil views:views]];
    [self.label.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[label]" options:0 metrics:nil views:views]];
    

    Basically, the main difference from yours is that I set editable to NO. I also leave out the width and height constraints and setting the compression resistance.

提交回复
热议问题