2015-12-22 6 views
0

У меня есть несколько кнопок, разделенных прописью 10px (leadPadding), в случае английского элементы должны начинаться слева направо, а в случае арабского справа налево и - централизованно.Горизонтальная локализация ограничения автоопределения UIScrollView

Этот код используется для рисования Scrollview:

 var previousView: UIView = self.itemsScrollView! 

     for i in 0..<self.items.count { 

      let sectionButton = UIButton(frame: CGRectZero) 
      sectionButton.titleLabel.text = "i = " + i 
      sectionButton.translatesAutoresizingMaskIntoConstraints = false 
      self.itemsScrollView!.addSubview(sectionButton) 

      // Left Constraint 
      let leftConstraint = NSLayoutConstraint(
      item: sectionButton, 
      attribute: .Leading, 
      relatedBy: .Equal, 
      toItem: toView, 
      attribute: (toView === self.itemsScrollView!) ? .Leading : .Trailing, 
      multiplier: 1.0, 
      constant: leadingPadding); 
      self.itemsScrollView! .addConstraint(leftConstraint) 

      // Top Constraint 
     let topConstraint = NSLayoutConstraint(
      item: sectionButton, 
      attribute: .Top, 
      relatedBy: .Equal, 
      toItem: self.itemsScrollView!, 
      attribute: .Top, 
      multiplier: 1.0, 
      constant: self.itemPaddingTopBottom); 
      self.itemsScrollView! .addConstraint(topConstraint) 

      // Width Constraint 
      let widthConstraint = NSLayoutConstraint(
      item: sectionButton, 
      attribute: .Width, 
      relatedBy: .Equal, 
      toItem: nil, 
      attribute: .NotAnAttribute, 
      multiplier: 1.0, 
      constant: buttonWidth); 
      self.itemsScrollView! .addConstraint(widthConstraint) 


      // Height Constraint 
      let heightConstraint = NSLayoutConstraint(
      item: sectionButton, 
      attribute: .Height, 
      relatedBy: .Equal, 
      toItem: nil, 
      attribute: .NotAnAttribute, 
      multiplier: 1.0, 
      constant: itemHeight); 
      self.itemsScrollView! .addConstraint(heightConstraint) 

      previousView = sectionButton 
     } 

     // add Trailing constraint on scroll 
     if (previousView !== self.itemsScrollView!) { 
     let leftConstraint = NSLayoutConstraint(
      item: previousView, 
      attribute: .Trailing, 
      relatedBy: .Equal, 
      toItem: self.itemsScrollView!, 
      attribute: .Trailing, 
      multiplier: 1.0, 
      constant: 0.0); 
     self.itemsScrollView! .addConstraint(leftConstraint) 
     } 

Он отлично работает, когда ориентация язык LTR. enter image description here

И странное поведение, когда ориентация язык RTL (они должны быть централизованы, как на картинке выше) enter image description here

Я предполагаю, что это то, что связано с ограничением Trailing с Scrollview, но я Не уверен. Если да, есть ли способ исправить это?

Thanks

ответ

0

Вы не должны добавлять несколько видов непосредственно в scrollview. Вместо этого вы должны добавить один контейнерный вид, горизонтально центрированный в scrollview, который должен включать все необходимое подвью. Ширина представления контейнера должна определяться его дочерними элементами, поэтому первая начальная позиция выравнивается с ведущим контейнером, а последний трейлинг объекта выравнивается с завершением контейнера в режиме LTR, или завершение первого элемента выравнивается с завершением контейнера, а последний элемент - выровнен с контейнером, ведущим в режиме RTL

+0

Справедливо, спасибо – Grace

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