iOS - 动态更改字体大小

3

我正在使用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 没有改变任何字体大小。我想知道如何动态地更改页面中所有字体的大小。

最好不要逐个设置页面上的标签。


3
来自 UIAppearance 文档:「iOS 在视图进入窗口时应用外观更改,不会更改已经在窗口中的视图的外观。若要更改当前已在窗口中的视图的外观,请将该视图从视图层次结构中移除,然后重新加入。」 - Larme
@Jimmy 现在可以工作了吗?你能回答一下吗? - Coder1000
1个回答

0
每当视图发生变化时,都会调用ViewDidLayoutSubviews(){ }函数,您可以获取当前视图的实际大小,并根据此识别是哪种移动设备以及屏幕大小,然后可以调整字体大小等。
viewDidLayoutSubviews(){
   sliderChanged()
}

func sliderChanged() {
   UILabel.appearance().fontSize = CGFloat(slider.value * 60) // B)
} 

谢谢你的回答。我添加了这个函数,但它没有达到我想要的效果。 - ryo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接