2016-04-10 4 views
0

У меня есть 3 ярлыка с точками пули, которые расположены горизонтально. Я хочу дать индивидуальный дизайн для пули, поэтому я решил использовать их как UIImage. Позвольте мне проиллюстрировать это:AutoResize Ширина контейнера ContainerView по динамическому UILabel

o PHP o Swift o Java 

Будет установлено фиксированное расстояние между каждой меткой и назначена точка маркера. Ярлыки также будут иметь фиксированное расстояние с маркером следующей метки (например, точка пули PHP - Swift).

В конце концов, я хочу центрировать его горизонтально на вид.

Выше сценария будет работать, если у меня есть статические тексты для ярлыка. Однако я хочу использовать динамические тексты.


Решение, которое я думал, создавало 3 вида контейнеров. Таким образом, у меня было бы:

View 

    ContainerView1 ContainerView2 ContainerView3 
    |------------| |--------------| |--------------| 
    | o PHP | | o Swift | | o C  | 
    |------------| |--------------| |--------------| 

Но оно не будет выглядеть согласованным для динамических/изменяющихся размеров текста. Я буду использовать sizeToFit, чтобы сделать текст подходящим, но представления контейнера создали новый отдельный ViewController, поэтому я не уверен, могу ли я сделать ширину представлений контейнера для автоматической настройки на «Bullet Point + dynamic Label's width».

Parent ContainerView (or UIView?) 
|-----------------------------| 
|  CV1  CV2  CV3 | 
| |-----| |-------| |---| | 
| |o PHP| |o Swift| |o C| | 
| |-----| |-------| |---| | 
|-----------------------------| 

Этот сценарий будет работать только тогда, когда я могу автоматически управлять шириной «зрения контейнера» относительно на Пули точка + этикетки шириной. Таким образом, я могу сделать фиксированный запас для каждого контейнера и центрировать его по горизонтали (возможно, используя родительский контейнер).

Каков способ достижения этого? Есть ли способ сделать это на Раскадке или программно?

ответ

1

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

let size = parentViewContainer. systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 

и установить его либо рамку или ограничение ширины.

Here - пример проекта, демонстрирующий это.

+0

Я действительно не понял, как CV1 поймет изменение размера файла и изменит его ширину на новую ширину (ширина маркера + метки). На этом этапе я понимаю, что CV1-CV2 и CV2-CV3 будут иметь фиксированные поля. Но теперь, как ParentCV будет корректировать свою ширину в соответствии с CV, а CV не корректируются (если я использую ведущие и завершающие CV от ParentCV). После этого центрирование ParentContainer до SuperView горизонтально довольно прямолинейно. Не могли бы вы дать мне более подробную информацию? – senty

+0

Внутри 'CV' вы должны применять тот же метод, что и в родительском, потому что вы по существу хотите одно и то же. Таким образом, вы должны установить главный запас для изображения пули, вертикальное расстояние между изображением пули и меткой и конечным краем для метки.И это должно быть так, autolayout установит ширину 'CV' на основе содержимого внутри. – Jelly

+0

Можете ли вы создать образец проекта, если его не так много спросить? Я действительно смущен и очень рад за это. Что я пытаюсь, что-то не получается: S – senty