【问题标题】:Using 'attributed' label text in Interface Builder在 Interface Builder 中使用“属性”标签文本
【发布时间】:2014-09-16 19:09:45
【问题描述】:

我试图放弃在我的 viewController 中使用 NSAttributedString,选择在 UILabel 的属性检查器的“文本”字段中使用“属性”选项(与“普通”相对)。

我已经选择了我想要归属的单个单词,并更改了它们的字体,这在文本预览窗口和 IB 本身的场景中得到了正确反映:

但是,模拟器没有反映这些更改,似乎在运行时未使用为属性指定的字体(当我更改颜色时,这按预期工作)。我已将字体添加到我的项目和我的 plist 中,但无济于事:

我没有找到有关此功能的文档,它很可能与 IB 中的“文本样式”功能非常相似(目前基本上没用)-但只是想看看是否有人在做类似的事情时有运气过去。

非常感谢任何帮助或建议,谢谢。

编辑 03/07/15 好吧,我很高兴地报告这个问题最终在 Xcode 7 中得到解决(仍处于测试阶段)。所以我们终于可以解决这个问题了。感谢所有试图和我一起解决这个问题的人。

【问题讨论】:

  • 请提供您的 Xcode 版本
  • 您是否在界面构建器中为标签使用了尺寸等级?我的意思是您是否尝试通过界面构建​​器为不同大小的类设置不同的字体大小?
  • 我在 Xcode 7.1 (7B91b) 中仍然遇到这个问题。
  • Xcode 7.3 中仍然存在这个问题。

标签: ios xcode interface-builder xcode6


【解决方案1】:

试试这个

在我的情况下,当我尝试将“Silversky Technology”设置为来自界面构建器的标签的属性文本时,它在我在模拟器中运行时不显示,但在界面构建器中显示。 所以我使用了一个技巧,我将 Silversky 字体设置为比技术文本大 1 个像素。

属性文本与相同大小的字体有问题所以改变 1 个字的大小这对我有用。

可能这是 xcode 错误,但这个技巧对我有用。

【讨论】:

    【解决方案2】:

    在 Xcode 7.0 beta 中:我发现这是可行的。

    故事板: http://imgur.com/Wb5H4ds

    输出:

    http://imgur.com/iOV8tJF

    .你可以动态地做。

    -(void)attributedText{
    UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(20, 100, 200, 44)];
    
    NSString *newsTitle = @"Hello";
    NSString *sportTtle = @"World";
    NSString *title = [NSString stringWithFormat:@"%@ %@", newsTitle,sportTtle];
    textView.text = title;
    
    UIColor *color = [UIColor redColor];
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0];
    
    NSDictionary *attrs = @{NSForegroundColorAttributeName : color,NSFontAttributeName:font};
    
    NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithAttributedString:textView.attributedText];
    [attrStr addAttributes:attrs range:[textView.text rangeOfString:sportTtle]];
    textView.attributedText = attrStr;
    [self.view addSubview:textView];
    }
    

    【讨论】:

      【解决方案3】:

      字体问题。解决方法:清理/清理构建文件夹。有时帮忙。 /更新:我知道这听起来像是一个“愚蠢的建议”——但它在我的情况下是个把戏,所以在这里发布——也许是为了节省别人的时间。

      【讨论】:

        【解决方案4】:

        这有一个简单而快速的解决方案,这对我来说是有效的。 该解决方案是在 AppDelegate.swift 文件的 didFinishLaunchingWithOptions 函数中添加代码行:

        对于文本视图

        UITextView.appearance().font = UIFont(name: "IranSans", size: 17)
        

        标签

        UILabel.appearance().font = UIFont(name: "IranSans", size: 17)
        

        对于 UiView 的其余部分,像这两个 ☝️

        【讨论】:

          【解决方案5】:

          我最初的问题:

          自定义字体,包含并与项目捆绑在一起。 XCode 版本 11

          使用带有属性文本的 UILabel,更改普通字体和斜体版本的使用。

          Interface Builder 在单个 UILabel 中显示正常和斜体字体 - 模拟器和 测试设备仅显示正常字体

          清理构建文件夹没有帮助。

          我的工作(解决方法)解决方案:

          我使用文本编辑器打开了 Interface Builder 文件 (*.storyboard) 并操作了颜色属性。我的文字全是白色的。我将所有斜体设置为 99% 白色,将所有普通字体设置为 100% 白色。

          <color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
          

          <color key="NSColor" red="0.99" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
          

          总结

          尝试在不同字体的文本部分之间制作不可见的交替差异(属性) - 使用文本编辑器

          【讨论】:

            【解决方案6】:

            唯一对我有用的是更改字体,所以我做了以下操作:

            1. SF Pro Text 表示整个文本,Arial 表示我想分隔的文本。
            2. 使用NSMutableAttributedString.enumerateAttributes 找到Arial 字体并按照我想要的方式进行修改。
            3. 将字体改回SF Pro Text

            希望对某人有所帮助。

            【讨论】:

              【解决方案7】:

              我在 xcode 6.1 中得到了这个工作。我添加了一个带有“Hello World”字样的 UILabel,并将字体更改为 Didot。

              这是我的故事板的 xml 代码。将其与您的匹配,看看是否有问题

              <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cd6-WA-P1d">
                                          <rect key="frame" x="20" y="91" width="275" height="21"/>
                                          <attributedString key="attributedText">
                                              <fragment content="Hello World">
                                                  <attributes>
                                                      <color key="NSColor" cocoaTouchSystemColor="darkTextColor"/>
                                                      <font key="NSFont" size="24" name="Didot"/>
                                                      <paragraphStyle key="NSParagraphStyle" alignment="right" lineBreakMode="wordWrapping" baseWritingDirection="natural"/>
                                                  </attributes>
                                              </fragment>
                                          </attributedString>
                                          <nil key="highlightedColor"/>
                                      </label>
              

              【讨论】:

              • 这是因为 Didot 是默认的 iOS 字体之一 (iosfonts.com)。尝试使用不在列表中的字体。在 6.1 中仍然不适合我。
              【解决方案8】:

              我试图在基本样式表视图单元格中使用属性标签来执行此操作。
              一旦您在 Interface Builder 中选择了“Attributed”选项,您的自定义字体就不会出现在字体选择器中。

              您可能会注意到字体选择器是默认的系统字体选择器。

              诀窍是将字体安装到 /Library/Fonts 中。现在,当您将标签更改为 Attributed 时,它们将出现在字体对话框中,以及故事板视图和预览视图中。

              但是,这个仍然在运行时不起作用。如果您在另一台未安装字体的计算机上查看情节提要,Interface Builder 将恢复为“紧密匹配”(在我的例子中是 Lucida Grande)。

              所有这一切都有一个优势:如果您正在尝试花哨的格式,很高兴在 Interface Builder 中看到它。然后您可以查看情节提要的源代码,并将属性复制到源代码中。
              不要忘记在 Interface Builder 中将标签重置为“Plain”,否则如上所述会发生“紧密匹配”问题。

              【讨论】:

              • 将标签重置为“普通”意味着您失去了很多关于如何呈现文本的选项,因此这永远不是解决方案......
              【解决方案9】:

              您是否在代码中更改了该标签的文本。 在 Interface Builder 中使用 label 的 config 属性时,不要在代码中更改任何与此 label 相关的内容。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-06-13
                • 2018-05-15
                • 2012-03-29
                • 2019-04-27
                • 1970-01-01
                • 2013-04-19
                • 1970-01-01
                • 2023-03-08
                相关资源
                最近更新 更多