NSForegroundColorAttributeName在Swift中不起作用?

Ja5*_*man 28 iphone swift ios8

viewDidLoad,我有类似以下内容添加文本属性UITextField:

let textAttributes = [
    NSForegroundColorAttributeName: UIColor.whiteColor(),
    NSStrokeColorAttributeName: UIColor.blackColor(),
    NSFontAttributeName: UIFont(name: "HelveticaNeue-CondensedBlack", size: 40)!,
    NSStrokeWidthAttributeName: 1.0
]

self.textField.delegate = self
self.textField.defaultTextAttributes = textAttributes
self.textField.text = "Top text field"
Run Code Online (Sandbox Code Playgroud)

除了之外,所有这些属性似乎都能正常工作NSForegroundColorAttributeName.此文字显得透明.这是一个Swift bug吗?

文本被放置在图像中UIScrollView.出现的文字:

屏幕截图

Mar*_*n R 54

来自技术问答QA1531:

这是因为NSStrokeWidthAttributeName的值的符号被解释为模式; 它指示是否要填充,描边或同时填充属性字符串.具体而言,零值仅显示填充,而正值仅显示笔划.负值允许显示填充和描边.

所以你的设置

NSStrokeWidthAttributeName: 1.0
Run Code Online (Sandbox Code Playgroud)

字体仅被描边并且未被填充,从而产生"轮廓字体".你想要设置

NSStrokeWidthAttributeName: -1.0
Run Code Online (Sandbox Code Playgroud)

相反,以便字体被抚摸填充.

如果NSStrokeWidthAttributeName在Xcode中按命令单击以跳转到定义,也可以找到该信息 :

NSNumber包含浮点值,以字体点大小的百分比表示,默认为0:无笔画; 单独使用中风,中风和填充为阴性(轮廓文本的典型值为3.0)

  • 哇.有效.我一直在想这件事. (2认同)