【问题标题】:Horizontally center label in NSTabViewItemNSTabViewItem 中的水平居中标签
【发布时间】:2015-03-26 01:08:52
【问题描述】:

我创建了NSTabViewItem 的子类,以便可以为选项卡视图项指定特定宽度,如this answer 中所示。这很好用,但是选项卡的标签不是水平居中的,因此文本右侧有额外的填充。如何在标签范围内将文本居中,或者如何在固定宽度NSTabViewItem 内正确居中文本?

【问题讨论】:

    标签: macos cocoa nstabview


    【解决方案1】:

    您可以覆盖“drawLabel:inRect:”函数并在此处提供适当的矩形进行绘图。喜欢

     (void)drawLabel:(BOOL)shouldTruncateLabel
           inRect:(NSRect)labelRect{
       //find your label size
       NSDictionary* attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          self.tabView.font,NSFontAttributeName,
                          nil];
         NSSize labelSize = [self.label sizeWithAttributes:attr];
       //modify your labelRect here.....
        labelRect.origin.x += floor((labelRect.size.width - labelSize.width)/2)
         labelRect.size.width = labelSize.width;
       //call super
        [super drawWithFrame:shouldTruncateLabel  inRect:labelRect];
     }
    

    【讨论】:

    • 如何使用它在正确的位置绘制它?我以为是labelRect.origin.x = labelRect.size.width / 2 - labelSize.width / 2,但由于某种原因,第一个选项卡的标签显示在其选项卡视图的左侧,第二个和第三个选项卡的标签显示在其左侧。
    • 应该是 labelRect.origin.x += floor(labelRect.size.width - labelSize.width)/2) 和 labelRect.size.width = labelSize.width
    • 谢谢,这几乎可以解决问题!它确实居中,但由于某种原因,并非所有文本都适合标签。例如,在 90 pt 宽度的选项卡项中使用文本“Results Calc”,它会切断最后一个 c 的大部分内容,尽管整个文本可以容纳剩余的填充。
    • 可能是标签大小计算的原因。这里要指定正确的字体属性“sizeWithAttributes:”。
    • 这确实是问题所在,使用 HelveticaNeue 点大小 14 有效,但有没有办法让文本的字体不固定为该字体?
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2012-12-27
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2021-02-26
    相关资源
    最近更新 更多