UISlider布局忽略宽度
Posted
技术标签:
【中文标题】UISlider布局忽略宽度【英文标题】:UISlider layout ignoring width 【发布时间】:2016-07-21 12:01:53 【问题描述】:我需要添加一个带有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 个点的空间)?
【问题讨论】:
【参考方案1】:frontPanel!.translatesAutoresizingMaskIntoConstraints = true
frontPanel
是 subview
的 ViewController.view
并且您设置了精确的 frame
。我的理解如下。
【讨论】:
以上是关于UISlider布局忽略宽度的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViews 线索内的 UISlider 不接收触摸事件
当我尝试以编程方式将 UISlider 添加到 UIView 时,如果宽度太高则不会出现