2016-11-11 4 views
0

это мои первые шаги с прошивкойцентрирования этикетки в подвид

class ViewController: UIViewController { 

// MARK: Properties 

@IBOutlet weak var testLabel: UILabel! 

// MARK: Events 

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

override func viewDidLayoutSubviews() { 
    testLabel.numberOfLines = 0 
    testLabel.sizeToFit() 
    testLabel.center.x = testLabel.superview!.center.x 
    //from here the label is centered 
} 

// MARK: Actions 

@IBAction func trackButton(_ sender: UIButton) { 
    //first call: the label is aligned on the left 
    //following calls: the label is centered 
    testLabel.text = Track.createTrack().toText() 
    //even the following commented code does not allow the centering 
    //on the first call 

    //testLabel.sizeToFit() 
    //testLabel.center.x = testLabel.superview!.center.x 
} 
} 

конструкция выглядит следующим образом: design view

Я тянущие мои волосы на это.

================================================================================================================================== ==============

обновленный проект

class ViewController: UIViewController { 

// MARK: Properties  
@IBOutlet weak var testLabel: UILabel! 

// MARK: Events 

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

override func viewDidLayoutSubviews() { 
    //testLabel.numberOfLines = 0 
    //testLabel.sizeToFit() 
    //testLabel.center.x = testLabel.superview!.center.x 
} 

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

// MARK: Actions 

@IBAction func trackButton(_ sender: UIButton) { 
    testLabel.text = Track.createTrack().toText() 
} 
} 

enter image description here

+0

Вам нужно настроить ограничения интерфейса строитель. – rckoenes

ответ

1

Вы должны использовать Autolayout путем установления ограничений. В вашем случае в раскадровке.

  • удалить наиболее testLabel код виден в своем ответе:

    класс ViewController: UIViewController {

    // MARK: Properties 
    
    @IBOutlet weak var testLabel: UILabel! 
    
    
    // MARK: Actions 
    
    @IBAction func trackButton(_ sender: UIButton) { 
    testLabel.text = Track.createTrack().toText() 
    } 
    

    }

В раскадровке:

  • Выберите ваш Test Label
  • Удалить все контрсилы этикетки:

enter image description here

Вашей метка выглядит правильно. Я имею полную ширину, потому что вы установите StackView правку в fill:

Вы можете установить это center, но это будет влиять на все взгляды в stackView также. Если это не требуется, переместите метку из представления стека.

Кроме того, вы хотите, чтобы центрировать текст свойства UILabel, using the labels Alignment`:

enter image description here

+0

он не имеет никакого эффекта, но расширяет ширину метки и, таким образом, сохраняет текст слева. – tschmit007

+0

Можете ли вы связаться с проектом. Обновленный ответ. – shallowThought

+0

Если ограничения на метку расширяются, чтобы заполнить ширину, и вы все еще видите текст с выравниванием влево, проверили ли вы центральное выравнивание в построителе интерфейса, чтобы центрировать его в этом центральном пространстве? – elmarko

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