我想创建一个固定宽度但高度可变的视图。这意味着视图应根据其内容高度自动调整大小,但同时应保持相同的宽度。
如何以编程方式实现 ?
例如,我有下一段代码来创建标签和按钮:
NSTextField *label = [[NSTextField alloc] initWithFrame:[self frame]];
[label setEditable:NO];
[label setBackgroundColor:[NSColor clearColor]];
[label setBezeled:NO];
[label setFont:[NSFont fontWithName:@"Lucida Grande" size:13.0]];
[label setStringValue:@"Sample label text"];
NSButton *button = [[NSButton alloc] initWithFrame:primaryBounds];
[button setBezelStyle:10];
[button setTitle:@"Sample button text"];
[button setBounds:NSInsetRect([button bounds], -8.0, 0)];
[button sizeToFit];
[[self contentView] addSubview:label];
[[self contentView] addSubview:button];
他们被设置为填充整个contentView
框架。如何将label
设置为固定宽度和变量高度(基于其自身的文本内容),并将button
附加到label
在label
的底部?
好的,我已设法像这样自动调整NSTextView *label = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, [self frame].size.width, 0)];
[label setEditable:NO];
[label setBackgroundColor:[NSColor clearColor]];
[label setFont:[NSFont fontWithName:@"Lucida Grande" size:13.0]];
[label setString:@"Sample label text"];
[label setHorizontallyResizable:NO];
[label sizeToFit];
:
{{1}}
答案 0 :(得分:1)
在使用Mountain Lion的Autolayout下,您可以告诉文本字段它的首选宽度应该是:
[textField setPreferredMaxLayoutWidth:200]
现在,文本字段将测量其内容的大小,就好像它包含200个点一样,一旦内容达到该宽度,文本字段将倾向于垂直增长。
要将按钮附加到标签的底部,您需要添加一个约束,表示标签的底部等于按钮的顶部,加上22:
[parentView addConstraint:
[NSLayoutConstraint constraintWithItem:label
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:button
attribute:NSLayoutAttributeTop
multiplier:1
constant:22]];
或使用视觉格式语言和标准Aqua间距:
NSDictionary *viewsDict = NSDictionaryOfVariableBindings(label, button);
[view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[label]-[button]"
options:0
metrics:nil
views:viewsDict]];