我有一个UIView self.addProjectContainer
,其框架为(0 198; 300 30)。我正在创建一个UIButton并以编程方式将其添加为该UIView的子视图。这是保存对按钮的引用的属性:
var addProjectButton:UIButton?
这就是我在ViewController的viewDidLoad方法中所做的:
self.addProjectButton = UIButton(type: UIButtonType.System)
self.addProjectButton!.translatesAutoresizingMaskIntoConstraints = false
self.addProjectButton!.contentMode = UIViewContentMode.Redraw
self.addProjectButton!.frame = CGRect(x: 0, y: 0, width: 220, height: 30)
self.addProjectButton!.setTitle("+ Add Project", forState: UIControlState.Normal)
self.addProjectContainer.addSubview(self.addProjectButton!)
包含的UIView位置正确,我通过给它一个背景颜色并使用调试器来验证:
(lldb) po self.addProjectContainer
<UIView: 0x7fa43c019a40; frame = (0 198; 300 30); autoresize = RM+BM; layer = <CALayer: 0x7fa43c019bb0>>
我的问题是该按钮没有显示在该视图中,这是调试器告诉我的内容:
(lldb) po self.addProjectButton
▿ Optional<UIButton>
- Some : <UIButton: 0x7fa43ac596a0; frame = (-10 -309; 94 30); opaque = NO; layer = <CALayer: 0x7fa43ac58dd0>>
如果我将按钮更改为标签:
var addProjectLabel:UILabel?
并将其添加到视图中,如下所示:
let frame:CGRect = CGRect(x: 0, y: 0, width: 220, height: 30)
self.addProjectLabel = UILabel(frame: frame)
self.addProjectLabel!.text = "+ Add Project"
self.addProjectContainer.addSubview(self.addProjectLabel!)
标签会准确显示我希望按钮显示的位置:
(lldb) po self.addProjectLabel
▿ Optional<UILabel>
- Some : <UILabel: 0x7fc560d2d2a0; frame = (0 0; 220 30); text = '+ Add Project'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fc560d40a00>>
如何让按钮显示在正确的位置,就像标签一样?这让我发疯了。
答案 0 :(得分:2)
切断关于translatesAutoresizingMaskIntoConstraints
的行。这会导致您的frame
被忽略。
或者,如果您要将translatesAutoresizingMaskIntoConstraints
设置为false
,请使用约束,而不是frame
。