2014-12-08 1 views
1

Я создал один слайдер с помощью раскадровки теперь я пытаюсь изменить его ширину с помощью этого кода в viewDidLoad() метод:UISlider не меняет свою ширину, когда я изменить свой кадр - Ios Swift

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 в раскадровке (не хотите его создавать. В программном режиме в viewDidLoad также он должен поддерживать iOS 7, возможно ли это?)

Согласно Apple documentation автоматически обновлять вид при изменении кадра ..

+0

почему делать вы вызываете 'setNeedsUpdateConstraints'? Вы используете автозапуск? Если это так, его нельзя смешивать с настройкой рамки вручную. –

+0

Даже если я не называю это, это не меняет рамку. – Aks

+0

& Я удалил все ограничения автоопределения, потому что это создавало проблему в iOS 7, поэтому не используя autolayout сейчас ... – Aks

ответ

2

Наконец решаемый, добавив эту строку перед настройкой кадра:

timeSlider.setTranslatesAutoresizingMaskIntoConstraints(true) 

на самом деле я не добавил autolayout ограничения, но добавлял это ограничение во время выполнения автоматически поэтому добавьте это, но после добавления этой строки я получал w arning '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 ограничение, даже если я удалил все это, но в любом случае выше код решает вопрос ..