UISlider布局忽略宽度

Posted

技术标签:

【中文标题】UISlider布局忽略宽度【英文标题】:UISlider layout ignoring width 【发布时间】:2016-07-21 12:01:53 【问题描述】:

我需要添加一个带有UILabelUISlider 的弹出视图,但我无法设置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

frontPanelsubviewViewController.view 并且您设置了精确的 frame。我的理解如下。

【讨论】:

以上是关于UISlider布局忽略宽度的主要内容,如果未能解决你的问题,请参考以下文章

UISlider 突出显示状态,拇指宽度与正常不同

UICollectionViews 线索内的 UISlider 不接收触摸事件

UISlider 手柄在不同尺寸的 iPad 上更改宽度

当我尝试以编程方式将 UISlider 添加到 UIView 时,如果宽度太高则不会出现

当我改变它的框架时,UISlider 没有改变它的宽度 - ios Swift

删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画