我正在使用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
行不会改变任何字体大小。我想知道如何动态更改页面中的所有字体大小。
(最好,我不想在页面中逐个设置标签)
答案 0 :(得分:0)
每当视图发生变化时,都会调用ViewDidLayoutSubviews(){}函数,你可以得到当前视图的实际大小,相对于你可以根据你的身份确定哪个移动设备和屏幕尺寸可以调整字体大小等等
viewDidLayoutSubviews(){
sliderChanged()
}
func sliderChanged() {
UILabel.appearance().fontSize = CGFloat(slider.value * 60) // B)
}