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

时间:2014-12-08 11:10:09

标签: ios swift uislider

我现在使用storyboard创建了一个滑块我试图在viewDidLoad()方法中使用此代码更改其宽度:

var parentFrame:CGRect = self.view.frame
var currentFrame:CGRect = timeSlider.frame    // timeSlider is IBOutlet variable
timeSlider.frame = CGRect(x: currentFrame.origin.x + 20, y: currentFrame.origin.y, width:parentFrame.size.width, height: currentFrame.size.height)

但滑块宽度或位置没有变化&我不想以编程方式创建新的UISlider,我想使用现有的Outlet并在运行时更改其宽度。所以任何想法为什么这段代码不起作用?

P.S。 - 实际上我想根据设备大小更改滑块宽度,但是想要将UISlider保留在storyboard中(不想在viewDidLoad中以编程方式创建它也应该支持iOS 7吗?)

根据Apple documentation,我应该在更改框架时自动更新视图..

1 个答案:

答案 0 :(得分:3)

最后通过在设置框架之前添加此行来解决它:

timeSlider.setTranslatesAutoresizingMaskIntoConstraints(true)

实际上我没有添加任何autolayout约束,但是它在运行时自动添加了这个约束,所以必须添加这个,但是在添加这行后我收到警告'cannot simultaneously satisfy multiple constraints...',所以必须删除所有约束在viewDidLoad中。
所以最终的工作代码没有任何警告:

var parentFrame:CGRect = self.view.frame
var currentFrame:CGRect = timeSlider.frame
self.view.removeConstraints(self.view.constraints())
timeSlider.setTranslatesAutoresizingMaskIntoConstraints(true)
timeSlider.frame = CGRect(x: currentFrame.origin.x, y: currentFrame.origin.y, width:parentFrame.size.width - 14, height: currentFrame.size.height)

我仍然无法理解为什么它会添加autolayout约束,即使我已经删除了所有它,但无论如何上面的代码解决了这个问题..