我正在玩Swift,突然之间什么都没有出现。
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)
但是当我用酷炫的 UIButton 取代 Diabolic UIView 时,会出现红色方块:
Screen of the magic Red Square when I replace UIView by UIButton
所以,问题是,为什么我看不到UIView?
提前致谢:)
答案 0 :(得分:1)
您的约束适用于UIButton
因为按钮有 intrinsic content size - 他们可以决定他们想要的大小。
UIView
没有。*您需要:
UIView
并覆盖intrinsicContentSize()
以返回视图的默认大小。设置当前正在尝试删除的框架尺寸 - 布局引擎会忽略此框架。
* - 此方法的默认实现返回CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
或(-1, -1)
,这就是您根本看不到自己视图的原因。
答案 1 :(得分:1)
感谢 Aaron Brager ,我可以看到Reeed 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
答案 2 :(得分:-1)
使用viewWillAppear()
代替viewDidLoad()
来更新约束。
答案 3 :(得分:-1)
你错过了一件事,那就是Diabolic UIView的x,y坐标。