2014-10-19 2 views
0

Я играл с Swift, когда вдруг ничего не появилось.Swift - UIView addConstraints не работает

override func viewDidLoad() { 
    super.viewDidLoad() 

    var DiabolicView: UIView = UIView();//With UIButton it's working 
    DiabolicView.setTranslatesAutoresizingMaskIntoConstraints(false); 
    DiabolicView.frame.size = CGSize(width: 67, height: 67) 
    DiabolicView.backgroundColor = UIColor.redColor();//To see the view 
    view.addSubview(DiabolicView); 

    view.addConstraints([NSLayoutConstraint(item: DiabolicView, 
     attribute: .Bottom, 
     relatedBy: .Equal, 
     toItem: view, 
     attribute: .Bottom, 
     multiplier: 1.0, 
     constant: -100 
    )]); 
} 

Да, на самом деле ничего (screen of nothing)

Но когда я заменяю Diabolic UIView тенистым UIButton, то Красной площади появляются:

Screen of the magic Red Square when I replace UIView by UIButton

Итак, вопрос в том, почему я не вижу UIView?

Заранее спасибо :)

ответ

1

Ваши трудности работы с UIButton, потому что кнопки имеют intrinsic content size - они могут решить, насколько они хотят быть. .

UIView, с другой стороны, не * Вам нужно либо:

  • Добавить ограничения для определения размера вида по или
  • Подкласс UIView и переопределить intrinsicContentSize() вернуть размер по умолчанию Ваше мнение.

Установка размера кадра, который вы сейчас пытаетесь, не будет вырезать - этот кадр игнорируется механизмом компоновки.


* - по умолчанию реализация этого метода возвращает CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric) или (-1, -1), поэтому вы не видите ваш взгляд на все.

+0

супер круто спасибо :): D –

-1

Использование viewWillAppear() вместо viewDidLoad() обновить Сдерживает.

+0

Спасибо, но нет на Красной площади: '( –

-1

Вам не хватает одной вещи, а это x, y координаты Diabolic UIView.

+0

попробовать этот view.layOutIfNeeded(), но сделать это в viewDidAppear – ZAZ

+0

проверки перевод autoresizingmask в контрсилы – ZAZ

1

Благодаря Aaron Brager, я вижу Reed Squaaare !!!

import UIKit 

class SweetView: UIView { 
    override func intrinsicContentSize() -> CGSize { 
     return CGSize(width: 67, height: 67); 
    } 
} 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     var DiabolicView: SweetView = SweetView(); 
     DiabolicView.setTranslatesAutoresizingMaskIntoConstraints(false); 
     DiabolicView.backgroundColor = UIColor.redColor();//To see the view 
     view.addSubview(DiabolicView); 

     view.addConstraints([NSLayoutConstraint(item: DiabolicView, 
      attribute: .Bottom, 
      relatedBy: .Equal, 
      toItem: view, 
      attribute: .Bottom, 
      multiplier: 1.0, 
      constant: -100 
     )]); 
    } 

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

Спасибо! : D

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