【问题标题】:Make NSView with fixed width and variable height that fits contents使 NSView 具有适合内容的固定宽度和可变高度
【发布时间】:2012-11-21 11:40:46
【问题描述】:

我想创建一个宽度固定但高度可变的视图。这意味着视图应根据其内容高度自动调整大小,但同时应保持相同的宽度。

我怎样才能以编程方式

例如,我有下一段代码来创建标签和按钮:

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 设置为 fixed 宽度和 variable 高度(基于自身的文本内容),并将我的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];

【问题讨论】:

    标签: cocoa layout nsview nslayoutconstraint


    【解决方案1】:

    在使用 Mountain Lion 的自动布局下,您将告诉文本字段其首选宽度应该是多少:

    [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]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2012-11-08
      相关资源
      最近更新 更多