Как я могу установить константу ограничений AutoLayout в процентах от суперпредставления? - PullRequest
0 голосов
/ 19 октября 2018

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

Я создаю эти карты обмена как простой UIView, который содержитнесколько других элементов пользовательского интерфейса (в основном UIImageViews и UILabels).

Давайте для простоты назовем его SharingCardView .

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

Представьте себе, что я отображаю этот UIView на iPhone, а затем на iPad, я хочу сохранить соотношение сторон всего, что внутри SharingCardView , чтобы люди не могли видеть никакой разницы между визуальнымэкспортируется с iPhone или iPad.

### Вопрос:

Я хотел бы иметь возможность прикрепить метку к верхней части SharingCardView ** с константой10% **, как показано на скриншоте ниже.

enter image description here

### До сих пор я пробовал этот способ

Я попытался установить константу в self.bounds.width * 0.1, но когда я создаю мои границы просмотра, по-видимому, равен нулю, поэтому ограничение просто закрепляет все на самом верху без каких-либо дополнений.

nowUpOnYTLbl.anchor(top: topAnchor,
                            left: leftAnchor,
                            bottom: nil,
                            right: rightAnchor,
                            paddingTop: self.bounds.width * 0.1,
                            paddingLeft: 30,
                            paddingBottom: 0,
                            paddingRight: 30,
                            width: 0,
                            height: 20
        )

Любые предложения будут очень полезны.И если вы думаете, что подход совершенно неправильный, то я весь в ушах для альтернативных решений.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Это можно сделать, установив верхнее ограничение метки, относящейся к центру Y представления общего ресурса

вы даете shareView пропорциональный размер его superView, поэтому значение centerY будет отличаться при работе на разных устройствах, предположим, что вы хотите сделать эту константу 1/10 от высоты просмотра общего ресурса, тогда вы делаете

topConstraintOfLabel = (centerYOfShareView * 2) * 1/10

=

topConstraintOfLabel = centerYOfShareView * 1/5

Я делаю это, потому что мы не можем ограничить верхнее ограничение высотой, поэтому мы используем centerY и удваиваем аспект, который хотим, какcenterY = 0,5 * высота, то же самое относится и к продвижению / трейлингу с centerX

0 голосов
/ 19 октября 2018

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

0 голосов
/ 19 октября 2018

Не используйте frame / bounds для установки ограничения!Используйте только отношения ограничений, чтобы установить ограничения.Итак, здесь вы хотите, чтобы это верхнее ограничение составляло 1/10 от ограничения высоты суперпредставления.Таким образом, соотношение будет live , зависящее во время выполнения от того, какой фактически окажется высота суперпредставления.

Однако вы не можете этого сделать, потому что вы можете формировать только эти видысоотношения между одним ограничением по высоте и другим ограничением по высоте.

Поэтому вам придется использовать невидимое разделительное представление, ограничение высоты которого составляет 1/10 ограничения высоты суперпредставления (т.е. ограничения по высоте равны, с multiplier из 0.1).Мне было легко добиться этого в Интерфейсном Разработчике без кода вообще.На моих снимках экрана виден невидимый разделитель, так что вы можете видеть человека за занавесом ...!

enter image description here

enter image description here

...