我正在使用Swift。我希望在运行时动态反映UIAppearance的更改。我的视图有一些标签和一个滑块。滑块决定标签的字体大小。
import UIKit
class ViewController: UIViewController {
// Slider for label size
@IBOutlet weak var slider: UISlider!
// call if slider is changed
@IBAction func sliderChanged(sender: AnyObject) {
print(slider.value)
UILabel.appearance().fontSize = CGFloat(slider.value * 60) // B) this does NOT change any font size
}
override func viewDidLoad() {
super.viewDidLoad()
UILabel.appearance().fontSize = 50 // A) this changes font sizes of all labels
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
// Extension for changing all fontSize of UILabel
extension UILabel {
var fontSize: CGFloat{
get {return self.font.pointSize}
set {self.font = UIFont(name: self.font.fontName, size: newValue)}
}
}
代码行 A)
运行正常,可以改变页面中所有标签的字体大小。但是代码行 B
没有改变任何字体大小。我想知道如何动态地更改页面中所有字体的大小。
最好不要逐个设置页面上的标签。
UIAppearance
文档:「iOS 在视图进入窗口时应用外观更改,不会更改已经在窗口中的视图的外观。若要更改当前已在窗口中的视图的外观,请将该视图从视图层次结构中移除,然后重新加入。」 - Larme