2015-11-11 9 views
1

У меня довольно сложный дизайн макета, который может быть проще с помощью вложенных представлений стека в iOS. НО, у меня проблемы с контролем размера или распределения стеков, вложенных в другие стеки. Одна часть макета, например, выглядит ОК-иш, если я изложу Распределение по размеру Одинаково: enter image description hereКак контролировать относительную ширину UIStackViews, вложенных в другое представление стека?

НО, что я действительно хочу это фото и контейнер составляет около 1/3 ширины текстового поля стек. Если я установил Distribution to Fit пропорционально, стек с изображением (который не меняет размер) и разметкой контейнера и сквозит текст со стороны дисплея. Все, что я читаю, предлагает уменьшить приоритет сжатия содержимого. Я пробовал это на изображении, в контейнере и в представлении стека, но это мало что делает.

Может ли кто-нибудь указать мне в правильном направлении, чтобы контролировать относительную ширину стеков, вложенных в другие стеки?

ответ

0

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

Если у кого есть лучший подход, они могут ответить в рамках этого более детального вопрос: https://stackoverflow.com/questions/33875801/how-to-position-and-size-images-and-their-frames-in-nested-stack-views-in-ib-w

+0

Я тоже борюсь с этим. Мои интуиции HTML/CSSd являются препятствием. Но один совет, который я могу предложить, я думаю, что вы можете использовать UILayoutGuide в качестве альтернативы меньшему весу, чем UIView, если вы занимаетесь только макетом. – aehlke

0

Чтобы ответить на ваш вопрос: Может кто-то пожалуйста мне точку в правильном направлении, чтобы контролировать относительные ширины стеки, вложенные в другие стеки? ...

Проблемы заключается в том, что ваш верхнего уровняUIStackView просит для intrinsicContentSize всех его подвидов при определении того, как divy дополнительного места/сквоша вещи вместе, основываясь на каждом из подвидов вернулась intrinsicContentSize и их содержимоеИнгибированиеПриветственность/contentCompressionResistance. К сожалению, UIStackView сам - т. Е. Ваш вложенныйUIStackView - не возвращает ничего полезного для своего intrinsicContentSize (несмотря на то, что он имеет свои собственные подсмотры, которые делают). Таким образом, UIStackView верхнего уровня просто вспахивает вперед и выкладывает все, как будто вложенному пользователю все равно, поэтому ваш вложенный UIStackView становится шире, чем вам хотелось бы.

Мне повезло с помощью простого подкласса UIStackView для вложенного, который возвращает полезный intrinsicContentSize на основе его собственных значений ширины содержимого (для вертикальной оси) или высот (для горизонтальной оси) следующим образом:

@implementation NestedStackView 
- (CGSize)intrinsicContentSize 
{ 
    CGSize size = [super intrinsicContentSize]; // returns {UIViewNoIntrinsicMetric,UIViewNoIntrinsicMetric} 

    for (UIView *view in self.arrangedSubviews) 
     if (!view.hidden) { // UIStackView ignores hidden subviews when doing its layout; so should we... 
      if (self.axis == UILayoutConstraintAxisVertical) { 
       size.width = MAX(view.intrinsicContentSize.width, size.width); 
      } else { 
       size.height = MAX(view.intrinsicContentSize.height, size.height); 
      } 
     } 
    return size; 
} 
@end 

Поступая так, то верхнего уровня UIStackView теперь принимает желаемую ширину контента вложенной UIStackView в расчет при распределении ее пространства. [в сторону: я сначала попытался добавить явное NSLayoutConstraint в ширину вложенного UIStackView, но он просто проигнорировался. В то время как возвращался instrinsicContentSize.width работал]

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

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