在Interface Builder中使用“属性”标签文本

时间:2014-09-16 19:09:45

标签: ios xcode interface-builder xcode6

我试图放弃在我的viewController中使用NSAttributedString,选择在UILabel的属性检查器的“text”字段中使用“Attributed”选项(与'Plain'相对应)。

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

enter image description here

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

enter image description here

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

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

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

8 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:1)

字体问题。解决方法:清理/清理构建文件夹。有时帮忙。 /更新:我知道这听起来像是一个“愚蠢的建议” - 但它在我的案例中成了一个技巧,所以在这里张贴 - 以节省某人的时间。

答案 2 :(得分:1)

尝试一下

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

属性文本的字体大小相同,因此更改1个字的大小可以解决此问题。

也许这是xcode的错误,但这招对我有用。

答案 3 :(得分:0)

它有一个简单快速的解决方案,并且在我的案例中有效。 该解决方案是在AppDelegate.swift文件的didFinishLaunchingWithOptions func中添加代码行:

for textViews

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

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

和其余的UiView像这两个☝️

答案 4 :(得分:0)

我最初的问题:

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

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

界面生成器在单个 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"/>

总结

尝试在具有变化字体的文本部分之间产生不可见的交替差异(属性) - 使用文本编辑器

答案 5 :(得分:-2)

我在xcode 6.1中使用了这个。我添加了一个带有单词&#34; Hello World&#34;的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>

答案 6 :(得分:-2)

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

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

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

但是,此仍然在运行时不起作用。如果您在没有安装字体的情况下在另一台计算机上查看故事板,Interface Builder将恢复为“密切匹配”(在我的情况下为Lucida Grande)。

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

答案 7 :(得分:-3)

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