【问题标题】:how to make NSTextField to fit NSMutableAttributedString contained如何使 NSTextField 适合包含的 NSMutableAttributedString
【发布时间】:2016-02-19 14:14:45
【问题描述】:

我有一个 NSTextField,我在其中添加了 NSMutableAttributedString。我想将该字符串的大小设置为大数字,但是当我这样做时,文本似乎被截断了。如何告诉 NSTextField 变大?

这就是我所拥有的:

NSTextField* textField = [[NSTextField alloc] init];
NSMutableAttributedString* text = [[NSMutableAttributedString alloc]
  initWithString:@"0"];
NSRange titleRange = NSMakeRange(0, [text length]);
[text addAttribute:NSFontAttributeName
           value:[NSFont boldSystemFontOfSize:25]
           range:titleRange];
[textField setAttributedStringValue:text];

有什么建议吗? 提前致谢

【问题讨论】:

  • 你在使用自动布局吗?
  • 我正在使用自动布局,是的

标签: objective-c cocoa nstextfield nsmutableattributedstring


【解决方案1】:

创建一个 NSTextField 的子类

在实现中确实覆盖了intrinsicContentSize

-(NSSize)intrinsicContentSize
{
    if ( ![self.cell wraps] ) {
        return [super intrinsicContentSize];
    }

    NSRect frame = [self frame];

    CGFloat width = frame.size.width;

    frame.size.height = CGFLOAT_MAX;

    CGFloat height = [self.cell cellSizeForBounds: frame].height;

    return NSMakeSize(width, height);
}

// Than invalidate the layout when text changes
- (void)textDidChange:(NSNotification *)notification
{
    [super textDidChange:notification];
    [self invalidateIntrinsicContentSize];
}

在情节提要内的属性 Inspector 中,将 NSTextField 类设置为您的 customNSTextField 类,并将布局更改为从卷轴换行。 您必须将约束添加到您的 textField 到它的超级视图,在故事板中更容易。

之后你也可以直接设置字体大小:

[_textField setFont:[NSFont systemFontOfSize:25]];

【讨论】:

    【解决方案2】:
    [textField sizeToFit];
    

    但使用自动布局通常是一个更好的主意。

    【讨论】:

    • 如何使用自动布局来实现这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多