2015-10-22 2 views
0

Я подклассифицировал UILabel и UITextField, чтобы изменить размер шрифта только на 3,5-дюймовых устройствах (так как это невозможно сделать с использованием классов размеров независимо от устройств 4 и 4 дюйма).Переопределить размер шрифта для устройств iOS на 3,5 дюйма

Шрифт изменяется, если он сделан в 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 
    } 
} 
+0

Проблема в том, что у вас есть этот код помещается в методе, который вызывается снова и снова, что-то подобное должно существовать только в нагрузке просмотра и сделал Методы изменения ориентации – Knight0fDragon

+0

@ Knight0fDragon Я не думаю, что есть viewDidLoad, это подкласс 'UITextField' и' UILabel' ... есть ли какие-либо функции, о которых вы знаете, которые вызываются только однажды, когда я могу это сделать? –

+0

да, вы попробовали переопределить init ?, также вы можете использовать willMoveToSuperview (newSuperview: UIView?) – Knight0fDragon

ответ

1

Override didSet для font собственности.

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) 
      } 
     } 
    } 

} 
+0

Могу ли я сделать то же самое для подкласса UITextField? Я подклассифицирую оба ... Я не понимаю, почему яблоко не может просто дать нам класс размера для 3.5-дюймовые устройства ..... –

+0

Попробуй и посмотри. –

+0

Я получаю сообщение об ошибке -: 'Thread 1: EXC_BAD_ACCESS' в моем подклассе UILabel –

Смежные вопросы