1

У меня UISegmentedControl определен программно.Добавление NSLayoutConstraints в UISegmentedControl приводит к исчезновению UISegmentedControl

Я пытаюсь добавить ограничение макета, так что, когда мой iPad вращается, сегментированный элемент управления правильно размещается в повернутом виде, а не проливает экран.

применяет следующее ограничение:

 streamSegmentedControl.translatesAutoresizingMaskIntoConstraints = false 

    let segmentedControlWidth = NSLayoutConstraint(item: streamSegmentedControl, 
     attribute: .Width, 
     relatedBy: .Equal, 
     toItem: self.containerView, 
     attribute: .Width, 
     multiplier: 1.0, 
     constant: -10.0) 

    containerView.addConstraint(segmentedControlWidth) 

Моего UIsegmentControl определяются следующим образом:

 streamSegmentedControl = UISegmentedControl(items: ["Today's Events", "Past Events"]) 
    streamSegmentedControl.frame = CGRectMake(-10,containerView.frame.size.height*0.3,containerView.frame.width+20,40) 
    streamSegmentedControl.selectedSegmentIndex = 0 
    streamScope = "today" 
    streamSegmentedControl.setTitleTextAttributes(segmentedControlFont as [NSObject : AnyObject], forState: .Normal) 
    streamSegmentedControl.backgroundColor = UIColor.colorFromClass("background") 
    streamSegmentedControl.tintColor = UIColor.colorFromClass("default") 


    streamSegmentedControl.addTarget(self, action: "changeStreamScope:", forControlEvents: UIControlEvents.ValueChanged) 
    containerView.addSubview(streamTableView) 
    containerView.addSubview(streamSegmentedControl) 

Я не получаю сообщение об ошибке, но во время выполнения, мое сегментированное управление исчезает. Не уверен, что мне здесь не хватает, поскольку в прошлом я только делал автомасштабирование в раскадровки.

Я только хочу, чтобы иметь возможность регулировать ширину сегментированного элемента управления, поэтому я предполагаю, что мне нужно только одно ограничение компоновки.

Может ли кто-нибудь дать мне какое-то направление? Благодарю.

ответ

0

Необходимо, по крайней мере, добавить три ограничения. Ведущий, верхний и конечный. Я слабый, но ваши ограничения должны выглядеть.

let segmentedControlTop = NSLayoutConstraint(item: streamSegmentedControl, 
     attribute: .Top, 
     relatedBy: .Equal, 
     toItem: self.containerView, 
     attribute: .Top, 
     multiplier: 1.0, 
     constant: 0.0) 

let segmentedControlLeading = NSLayoutConstraint(item: streamSegmentedControl, 
     attribute: .Leading, 
     relatedBy: .Equal, 
     toItem: self.containerView, 
     attribute: .Leading, 
     multiplier: 1.0, 
     constant: 0.0) 

let segmentedControlTrailing = NSLayoutConstraint(item: streamSegmentedControl, 
     attribute: .Trailing, 
     relatedBy: .Equal, 
     toItem: self.containerView, 
     attribute: .Trailing, 
     multiplier: 1.0, 
     constant: 0.0) 

containerView.addConstraint(segmentedControlTop) 
containerView.addConstraint(segmentedControlLeading) 
containerView.addConstraint(segmentedControlTrailing) 

Если вы хотите сохранить 5 точку смещения от надтаблицы, попробуйте играть с постоянными значениями начальных и конечных точек с использованием 5.

+0

Спасибо. Я не уверен, что это имело какое-то значение. Я получаю следующую ошибку времени выполнения: иерархия представления не подготовлена ​​к ограничению. При добавлении в представление элементы ограничения должны быть потомками этого представления (или самого представления). Это приведет к сбою, если ограничение должно быть разрешено до того, как будет собрана иерархия представления. – Jeremy

+0

Убедитесь, что вы добавили сегментированный контроль в иерархии, прежде чем добавлять ограничения – BangOperator

+0

Спасибо. Он добавлен в представление контейнера: containerView.addSubview (streamSegmentedControl) – Jeremy

 Смежные вопросы

  • Нет связанных вопросов^_^