约束添加到按钮迅速(苹果iOS教程)

问题描述:

我编程苹果Tutorial(章:“添加按钮来查看”)的iOS开发。只需复制下面的代码,我得到了不同的结果:约束添加到按钮迅速(苹果iOS教程)

import UIKit 

@IBDesignable class RatingControl: UIStackView { 

//MARK: Properties 
private var ratingButtons = [UIButton]() 

var rating = 0 
@IBInspectable var starSize: CGSize = CGSize(width: 44.0, height: 44.0) 
@IBInspectable var starCount: Int = 5 

//MARK: Initialisation 
override init(frame: CGRect) { 
    super.init(frame: frame) 
    setupButtons() 
} 
required init(coder: NSCoder) { 
    super.init(coder: coder) 
    setupButtons() 
} 

//MARK: Private Methods 
private func setupButtons() { 

     // Create the button 
     let button = UIButton() 
     button.backgroundColor = UIColor.red 

     // Add constraints 
     button.translatesAutoresizingMaskIntoConstraints = false 
     button.heightAnchor.constraint(equalToConstant: starSize.height).isActive = true 
     button.widthAnchor.constraint(equalToConstant: starSize.width).isActive = true 

     // Setup the button action 
     button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchUpInside) 

     // Add the button to the stack 
     addArrangedSubview(button) 

     // Add the new button to the rating button array 
     ratingButtons.append(button) 
} 

//MARK: Button Action 
func ratingButtonTapped(button: UIButton) { 
    print("Button pressed ") 
} 

}

约束似乎并不奏效。我的红色按钮与其超级堆栈视图的大小完全相同。它不受44x44的限制。

控制台报告,并非所有约束可以同时满足:

 2016-12-25 18:43:02.375251 FoodTracker[13644:1695258] [LayoutConstraints] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
     (1) look at each constraint and try to figure out which you don't expect; 
     (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x600000092160 UIButton:0x7ff15f40a740.width == 44 (active)>", 
    "<NSLayoutConstraint:0x608000095a90 'UISV-canvas-connection' FoodTracker.RatingControl:0x7ff15f6116c0.leading == UIButton:0x7ff15f40a740.leading (active)>", 
    "<NSLayoutConstraint:0x608000095b30 'UISV-canvas-connection' H:[UIButton:0x7ff15f40a740]-(0)-| (active, names: '|':FoodTracker.RatingControl:0x7ff15f6116c0)>", 
    "<NSLayoutConstraint:0x608000095630 'UIView-Encapsulated-Layout-Width' FoodTracker.RatingControl:0x7ff15f6116c0.width == 200 (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000092160 UIButton:0x7ff15f40a740.width == 44 (active)> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
2016-12-25 18:43:02.376266 FoodTracker[13644:1695258] [LayoutConstraints] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
     (1) look at each constraint and try to figure out which you don't expect; 
     (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x600000091e90 UIButton:0x7ff15f40a740.height == 44 (active)>", 
    "<NSLayoutConstraint:0x608000095b80 'UISV-canvas-connection' FoodTracker.RatingControl:0x7ff15f6116c0.top == UIButton:0x7ff15f40a740.top (active)>", 
    "<NSLayoutConstraint:0x608000095c70 'UISV-canvas-connection' V:[UIButton:0x7ff15f40a740]-(0)-| (active, names: '|':FoodTracker.RatingControl:0x7ff15f6116c0)>", 
    "<NSLayoutConstraint:0x608000095680 'UIView-Encapsulated-Layout-Height' FoodTracker.RatingControl:0x7ff15f6116c0.height == 110 (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000091e90 UIButton:0x7ff15f40a740.height == 44 (active)> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

然而,我还没有定义其它约束,除了上述类的那些堆栈视图。同样在界面构建器中,大纲中的堆栈视图没有其他约束。 'UISV-canvas-connection'从哪里来?

+0

你为什么不在故事板或XIB定义呢? –

+0

我只是想尝试一下像教程,但不知道为什么不同的东西发生。 – McLawrence

+0

你能显示你的整个按钮代码吗?你和debbuger一起工作吗? –

发现了同样的问题与苹果公司的辅导工作时,并没有使创建垂直叠层视图外水平叠层观的错误。

并将其拖回垂直堆栈视图后,它为我工作:)

This is how my Navigation Window Looks now

Simulator

+0

你能解释一下为什么吗? – Martian2049

+0

我也有兴趣了解为什么这有所作为 –