2013-07-22 2 views
1

Я немного застрял в горизонтальном положении на представлениях. У меня есть много видов в контейнере представления (это больше, чем общая ширина подзаголовков).Автоцентр UIViews

Все виды должны быть расположены по горизонтали. Если subview помечен как скрытый (или с нулевой альфа), позиция остальных должна измениться, чтобы снова центрировать.

У вас есть идея, как я могу это сделать?

+0

Есть ли что-то, препятствующее перестановке представлений при отображении/скрытии одного из подзонов? –

+0

Нет, но как я могу их переупорядочить? – Pierre

+0

, установив их свойство рамки или центра. –

ответ

3

Что-то вроде этого должно работать. Я передаю контейнер в функцию, определяю ширину всех видимых подзонов и получаю смещение x от ширины контейнера и ширины видимых подзонов. Оттуда вы можете обновить рамку видимых подзонов, и они должны быть центрированы по горизонтали.

-(void)centerViews:(UIView*)container { 
    CGFloat width = 0.0; 
    for(UIView *view in container.subviews) { 
     if(view.alpha > 0.0) { 
      width += view.frame.size.width; 
     } 
    } 

    CGFloat xOffset = (container.frame.size.width - width)/2.0; 

    for(UIView *view in container.subviews) { 
     if(view.alpha > 0.0) { 
      [view setFrame:CGRectMake(xOffset, view.frame.origin.y, view.frame.size.width, view.frame.size.height)]; 

      xOffset += view.frame.size.width; 
     } 
    }  
} 

Вам нужно будет обновить это, чтобы включить любое дополнение, которое у вас есть между видами.

+0

Хорошо, я написал это, но забыл испортить xOffset. Спасибо вам ! – Pierre

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