根据UIPicker位置动态调整UILabel x值?

时间:2017-01-22 23:09:42

标签: ios swift autolayout uilabel uipickerview

我有UIPickerView延伸到autolayout storyboards中的前导视图和尾随视图。

我想在UILabel的每个部分旁边添加一个UIPickerView,该部分与选择器部分保持10 px不变。

现在我试图以编程方式这样做:

    var hourXVal = pickerWidth - 330.0
    var minXVal = pickerWidth - 190.0
    var secXVal = pickerWidth - 50.0

    if(self.view.frame.width == 320)
    {
        hourXVal = pickerWidth - 250.0
        minXVal = pickerWidth - 140.0
        secXVal = pickerWidth - 35.0
    }

    else if(self.view.frame.width == 414)
    {
        hourXVal = pickerWidth - 330.0
        minXVal = pickerWidth - 190.0
        secXVal = pickerWidth - 50.0
    }
    let hourLabel = UILabel(frame: CGRect(x:hourXVal, y:88, width: 100, height:40))
    let minuteLabel = UILabel(frame: CGRect(x:minXVal, y:88, width: 100, height:40))
    let secondLabel = UILabel(frame: CGRect(x:secXVal, y:88, width: 100, height:40))

    hourLabel.text = "Hours"
    minuteLabel.text = "Minutes"
    secondLabel.text = "Sec"

    self.timePickerView.addSubview(hourLabel)
    self.timePickerView.addSubview(minuteLabel)
    self.timePickerView.addSubview(secondLabel)

但是,self.view.frame.width报告iPhone SEiPhone 6的宽度相同,即使6个UI显示为(但SE和5看起来很好):< / p>

enter image description here

有更好的方法吗?怎么样?

1 个答案:

答案 0 :(得分:1)

可能发生的事情是,当您致电self.view.frame.width时,尚未计算正确的视图宽度。如果在Interface Builder中使用它,它可以具有正确的iPhone 5 / SE宽度。如果您在加载视图时调用需要-viewDidLoad宽度的代码,但是它的最终大小尚未计算,则会发生这种情况。由于您正在使用框架,请尝试在viewWillLayoutSubviewsviewDidLayoutSubviews中进行设置。