2016-12-24 5 views
1

Я не могу изменить размер текста в программном созданном UILabel.Невозможно изменить размер текста в программном виде. UILabel

Вот захват экрана:

screen grab

Вот определение класса:

class myView: UIView { 
    let theLabel = UILabel() 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.theLabel.text = "Text" 
     self.theLabel.backgroundColor = UIColor.lightGray 
     self.backgroundColor = UIColor.blue 

     self.theLabel.adjustsFontSizeToFitWidth = true 
     self.theLabel.textAlignment = .center 
     self.theLabel.numberOfLines = 1 
     self.theLabel.minimumScaleFactor = 0.1 
     self.theLabel.font = UIFont(name: "System", size:160) 
     self.theLabel.translatesAutoresizingMaskIntoConstraints = false 
     self.addSubview(self.theLabel) 

     let selfAspectConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.width, multiplier: 1.0, constant: 0) 

     let labelWidthConstraint = NSLayoutConstraint(item: self.theLabel, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.width, multiplier: 0.5, constant: 0) 

     let heightConstraint = NSLayoutConstraint(item: self.theLabel, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self.theLabel, attribute: NSLayoutAttribute.width, multiplier: 0.5, constant: 0) 

     let xConstraint = NSLayoutConstraint(item: self.theLabel, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1, constant: 0) 

     let yConstraint = NSLayoutConstraint(item: self.theLabel, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1, constant: 0) 

     self.addConstraints([selfAspectConstraint,labelWidthConstraint, heightConstraint,xConstraint,yConstraint]) 
    } 
    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 
} 

Я попытался изменить размер шрифта. Я установил adjustsFontSizeToFitWidth в true и установил minimumScaleFactor. Размер текста всегда один и тот же. Я ожидаю, что он заполнит область ярлыков, серая коробка.

Как я могу заставить это работать?

+0

, как вы создаете 'myView'? – aircraft

+1

Я думаю, что причина @aircraft заключается в том, что вы все кодировали в init (coder :), а не init (frame :). – dfd

+0

в IB. Я добавил UIView и установил класс в myView. –

ответ

0

попробуйте добавить эту строку после того, как вы установите шрифт: self.theLabel.font = theLabel.font.withSize (45)

+0

Это действительно работает! Благодаря! Зачем мне явно устанавливать размер шрифта? Я установил размер, когда я назначил шрифт. –

+0

Возможно, шрифт не назван «Система». Также попробуйте –

+2

self.theLabel.font = UIFont.systemFont (ofSize: 80) –

0

Ваш код работает, как ожидалось, без каких-либо изменений. enter image description here enter image description here

CustomView1NoXIB.swift

import UIKit 
class CustomView1NoXIB : UIView { 
    let theLabel = UILabel() 

    required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    initSubviews() 
    } 




    func initSubviews() { 
    self.theLabel.text = "Hello" 
// self.theLabel.text = "Hello World Big Text Becomes Small" 
    self.theLabel.backgroundColor = UIColor.lightGray 
    self.backgroundColor = UIColor.blue 

    self.theLabel.adjustsFontSizeToFitWidth = true 
    self.theLabel.textAlignment = .center 
    self.theLabel.numberOfLines = 1 
    self.theLabel.minimumScaleFactor = 0.1 
    self.theLabel.font = UIFont(name: "System", size:160) 
    self.theLabel.translatesAutoresizingMaskIntoConstraints = false 
    self.addSubview(self.theLabel) 

    let selfAspectConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.width, multiplier: 1.0, constant: 0) 

    let labelWidthConstraint = NSLayoutConstraint(item: self.theLabel, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: self, attribute: NSLayoutAttribute.width, multiplier: 0.5, constant: 0) 

    let heightConstraint = NSLayoutConstraint(item: self.theLabel, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: self.theLabel, attribute: NSLayoutAttribute.width, multiplier: 0.5, constant: 0) 

    let xConstraint = NSLayoutConstraint(item: self.theLabel, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1, constant: 0) 

    let yConstraint = NSLayoutConstraint(item: self.theLabel, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1, constant: 0) 

    self.addConstraints([selfAspectConstraint,labelWidthConstraint, heightConstraint,xConstraint,yConstraint]) 

    } 
} 

CustomView1ViewController.swift

import UIKit 
class CustomView1ViewController : UIViewController { 
    @IBOutlet weak var customView1: CustomView1! 
    @IBOutlet weak var customView1NoXIB: CustomView1NoXIB! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    } 
} 

Спасибо, Sriram

+0

Спасибо за ответ Шрирам. Я пытался сделать текст большим, чтобы заполнить рамку. Ответ Дэвида Линдси работает, хотя я не знаю, почему. –

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