NSTextField宽度和自动布局

Ben*_*Uri 9 cocoa nstextfield nstextview autolayout

我试图以NSTextField编程方式创建.

我想在NSTextField自动布局中使用它,因此它的宽度将自动定义以显示整行(只有一行文本).

问题是,textField.intrinsicContentSize并且textField.fittingSize水平坐标都有-1和0值,因为下面代码的输出是: textField.intrinsicContentSize={-1, 21} textField.fittingSize={0, 21}

代码:

NSTextField* textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 10, 24)];    
NSString* str = @"One line of text here.";
[textField setStringValue: str];
[textField setTranslatesAutoresizingMaskIntoConstraints:NO];
[textField invalidateIntrinsicContentSize];

NSLog(@"textField.intrinsicContentSize=%@", NSStringFromSize(textField.intrinsicContentSize));
NSLog(@"textField.fittingSize=%@", NSStringFromSize(textField.fittingSize));
Run Code Online (Sandbox Code Playgroud)

这使文本字段具有由自动布局指定的零宽度.

我应该怎么做才能为有意义的值fittingSize,并intrinsicContentSize因此它们反映了文本字段的内容文本字段的属性?

Ben*_*Uri 8

另一种在不使用的情况下计算文本字段最佳宽度的方法fittingSize是使用以下代码(替换John Sauer的sizeTextFieldWidthToFit方法):

- (void) sizeTextFieldWidthToFit {
    [textField sizeToFit];
    CGFloat newWidth = NSWidth(textField.frame);
    textFieldWidthConstraint.constant = newWidth;
}
Run Code Online (Sandbox Code Playgroud)

您可以将textFieldWidthConstraint的优先级设置为低于另一个不等式约束的优先级,将您的需求表示为最小值25.