【发布时间】:2016-01-22 03:49:19
【问题描述】:
我将 UILabel 和 UITextField 子类化,以便仅在 3.5 英寸设备上更改字体大小(因为这不能使用独立于 4 和 4.7 英寸设备的大小类别来完成)。
如果在layoutSubviews() 中完成,字体会发生变化,但它会被重复调用,因此字体大小最终为零。我正在尝试找到另一个设置它的位置,它只调用一次并且仍然可以覆盖字体大小。
代码:
if (UIDevice.currentDevice().orientation == .Portrait) {
if (UIScreen.mainScreen().bounds.size.height < 568) {
self.font = UIFont(name: "Score Board", size: (self.font.pointSize - CGFloat(10.0)))
} else {
self.font = UIFont(name: "Score Board", size: self.font.pointSize)
}
} else {
if (UIScreen.mainScreen().bounds.size.width < 568) {
self.font = UIFont(name: "Score Board", size: (self.font.pointSize - CGFloat(10.0)))
} else {
self.font = UIFont(name: "Score Board", size: self.font.pointSize)
}
}
我也在didMoveToSuperview() 和willMovetoSuperview() 中尝试过,它只被调用过一次,但实际上并没有改变字体。我也在init 中尝试过,但字体没有设置。
import Foundation
import UIKit
class CustomUILabel : UILabel {
override func didMoveToSuperview() {
super.didMoveToSuperview()
// Code from above
}
}
【问题讨论】:
-
问题是你把这段代码放在一个被反复调用的方法中,这样的东西应该只存在于视图加载和方向改变方法中
-
@Knight0fDragon 我不认为有 viewDidLoad,它是
UITextField和UILabel的子类...你知道的任何函数只在我可以调用的时候调用这样做? -
是的,你有没有尝试覆盖 init?你也可以使用 willMoveToSuperview(newSuperview: UIView?)
-
@Knight0fDragon 在那里不起作用,字体没有被改变
-
如果在will move中不起作用,说明字体是在后面设置的,所以在didmovetosuperview中试试
标签: ios swift fonts uitextfield