如何使NSMutableAttributedString响应来自设置应用程序的动态类型文本

时间:2017-11-30 08:33:14

标签: ios swift accessibility ios11 nsattributedstring

let dictTitleColor = [NSAttributedStringKey.foregroundColor: UIColor.LTColor()]
let titleAttributedString = NSMutableAttributedString(string: title, attributes: dictTitleColor)
alert.setValue(titleAttributedString, forKey: "attributedTitle")

当我增加设备的字体大小时,标题字符串不增加我在alertview控制器中设置了这个字符串?那么如何使这个响应字体大小改变?

2 个答案:

答案 0 :(得分:0)

let dictTitleColor = [NSAttributedStringKey.foregroundColor : UIColor.green,
                      NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .headline)]
let titleAttributedString = NSMutableAttributedString(string: title, attributes: dictTitleColor)
alert.setValue(titleAttributedString, forKey: "attributedTitle")

注意:如果显示弹出窗口,然后用户在辅助功能设置中更改了字体大小,则会失败。在这种情况下,您可能需要收听UIContentSizeCategoryDidChange并更新其中的字体大小。

e.g。

NotificationCenter.default.addObserver(self, selector: #selector(preferredContentSizeChanged(_:)), name: NSNotification.Name.UIContentSizeCategoryDidChange, object: nil)

方法

@objc func preferredContentSizeChanged(_ notification: Notification) {
  let dictTitleColor = [NSAttributedStringKey.foregroundColor : UIColor.green,
                        NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .headline)]
  let titleAttributedString = NSMutableAttributedString(string: title, attributes: dictTitleColor)
  alert.setValue(titleAttributedString, forKey: "attributedTitle")
}

答案 1 :(得分:0)

使NSMutableAttributedString响应Dynamic Typesimple string element相同。

我在下面提供一个允许您使用的示例:

  • 带有Dynamic Type的{​​{1}}。
  • 使用NSMutableAttributedString带连字符的完美单词截断。 enter image description here

    NSMutableParagraphStyle

使用此代码段,您可以通过@IBOutlet weak var myLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() let myFrenchString = "Hello, ceci est un texte anticonstitutionnellement très très long qu'il va falloir couper je nesaisvraimentpasquand." let paraph = NSMutableParagraphStyle() paraph.alignment = .justified paraph.hyphenationFactor = 1.0 let myText = NSMutableAttributedString(string:myFrenchString, attributes: [ .font: UIFontMetrics(forTextStyle: .title1).scaledFont(for: UIFont(name:"HoeflerText-Black", size:18)!) ]) myText.addAttribute(.paragraphStyle, value: paraph, range: NSMakeRange(0,1)) myLabel.attributedText = myText } 使NSMutableAttributedString响应。

如果您需要进一步了解Dynamic Type功能,我建议您看一下2017年WWDC视频使用动态类型构建应用程序中的this complete and detailed summary