UISlider布局忽略宽度
UISlider layout ignoring width
我需要添加带有 UILabel
和 UISlider
的弹出视图,但我无法设置 UISlider
的宽度。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
frontPanel = UIView()
frontPanel!.backgroundColor = UIColor.whiteColor()
frontPanel!.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(frontPanel!)
valueSlider = UISlider()
valueSlider!.translatesAutoresizingMaskIntoConstraints = false
valueSlider!.frame = CGRect(x: 0,
y: 0,
width: frontPanel!.frame.width - 16,
height: 35)
sliderLabel = UILabel()
sliderLabel!.translatesAutoresizingMaskIntoConstraints = false
sliderLabel!.text = "Adjust value"
let frontPanelSubviews: [String : AnyObject] = [
"label" : sliderLabel!,
"slider" : valueSlider!
]
frontPanel!.addSubview(sliderLabel!)
frontPanel!.addSubview(valueSlider!)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]-[slider]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-[label]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-[slider]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
}
override func viewDidLayoutSubviews() {
frontPanel?.frame = CGRect(x: 0,
y: view.frame.height - 75,
width: view.frame.width,
height: 75)
}
@IBOutlet weak var backPanel: UIView!
@IBOutlet weak var valueLabel: UILabel!
var frontPanel: UIView?
var valueSlider: UISlider?
var sliderLabel: UILabel?
}
在此示例中,UISlider
将始终获得与 UILabel
相同的宽度。
如果我只使用像 H:|-[label]-[slider]-|
这样的水平布局约束,那么 UISlider
会得到 width == 0
。
如何让 UISlider
使用父视图的全宽(减去每一边的 8 点 space)?
frontPanel!.translatesAutoresizingMaskIntoConstraints = true
frontPanel
是 ViewController.view
的 subview
,您设置了精确的 frame
。在我的理解中是这样的。
我需要添加带有 UILabel
和 UISlider
的弹出视图,但我无法设置 UISlider
的宽度。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
frontPanel = UIView()
frontPanel!.backgroundColor = UIColor.whiteColor()
frontPanel!.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(frontPanel!)
valueSlider = UISlider()
valueSlider!.translatesAutoresizingMaskIntoConstraints = false
valueSlider!.frame = CGRect(x: 0,
y: 0,
width: frontPanel!.frame.width - 16,
height: 35)
sliderLabel = UILabel()
sliderLabel!.translatesAutoresizingMaskIntoConstraints = false
sliderLabel!.text = "Adjust value"
let frontPanelSubviews: [String : AnyObject] = [
"label" : sliderLabel!,
"slider" : valueSlider!
]
frontPanel!.addSubview(sliderLabel!)
frontPanel!.addSubview(valueSlider!)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]-[slider]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-[label]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
frontPanel?.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-[slider]-|",
options: [],
metrics: nil,
views: frontPanelSubviews)
)
}
override func viewDidLayoutSubviews() {
frontPanel?.frame = CGRect(x: 0,
y: view.frame.height - 75,
width: view.frame.width,
height: 75)
}
@IBOutlet weak var backPanel: UIView!
@IBOutlet weak var valueLabel: UILabel!
var frontPanel: UIView?
var valueSlider: UISlider?
var sliderLabel: UILabel?
}
在此示例中,UISlider
将始终获得与 UILabel
相同的宽度。
如果我只使用像 H:|-[label]-[slider]-|
这样的水平布局约束,那么 UISlider
会得到 width == 0
。
如何让 UISlider
使用父视图的全宽(减去每一边的 8 点 space)?
frontPanel!.translatesAutoresizingMaskIntoConstraints = true
frontPanel
是 ViewController.view
的 subview
,您设置了精确的 frame
。在我的理解中是这样的。