【问题标题】:Override font size for 3.5 inch iOS devices覆盖 3.5 英寸 iOS 设备的字体大小
【发布时间】:2016-01-22 03:49:19
【问题描述】:

我将 UILabelUITextField 子类化,以便仅在 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,它是 UITextFieldUILabel 的子类...你知道的任何函数只在我可以调用的时候调用这样做?
  • 是的,你有没有尝试覆盖 init?你也可以使用 willMoveToSuperview(newSuperview: UIView?)
  • @Knight0fDragon 在那里不起作用,字体没有被改变
  • 如果在will move中不起作用,说明字体是在后面设置的,所以在didmovetosuperview中试试

标签: ios swift fonts uitextfield


【解决方案1】:

font 属性覆盖didSet

class MyLabel : UILabel {

    private func shouldShrinkFont() -> Bool {
        let size = UIScreen.mainScreen().bounds.size
        // This check works regardless of orientation.
        return size.width + size.height == 480 + 320
    }

    override var font: UIFont! {
        didSet {
            if shouldShrinkFont() {
                super.font = UIFont(name: "Score Board", size: font.pointSize - 10)
            }
        }
    }

}

【讨论】:

  • 我可以为 UITextField 子类做同样的事情吗?我是两个子类...我不明白为什么苹果不能只给我们一个 3.5 英寸设备的尺寸等级.....
  • 我收到一个错误 - : Thread 1: EXC_BAD_ACCESS 在我的 UILabel 子类中
  • 我更新了我的答案。看起来你必须在didSet 中说super.font = ...,否则你会得到无限递归。
猜你喜欢
  • 2015-06-22
  • 2014-03-27
  • 2014-10-19
  • 2013-05-05
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多