Хобрук: Ваш путь к мастерству в программировании

Автоматическое начальное и конечное ограничение макета (анимация)

я ищу объяснение поведения ограничений, в основном я программно создаю ограничения следующим образом:

leadingConstraint = NSLayoutConstraint(item: yellowBlock, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)

trailingConstraint = NSLayoutConstraint(item: yellowBlock, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)

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

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

Теперь я хочу добавить поля по краям экрана, поэтому я установил начальное и конечное ограничение константы на 10 pp. Что происходит во время анимации, так это то, что блок идеально выровнен по левому краю (10 pp), но как только он скользит к правому краю на самом деле он выходит за пределы экрана (разведка на 10 стр.). Почему он исчезает с экрана? Если я установлю начальное ограничение на 10, а замыкающее на (минус) -10, тогда все будет идеально выровнено с полями 10 pp с обеих сторон. Для меня это не имеет смысла :(

Я уверен, что других ограничений нет, даже пытался сбросить все ограничения следующим образом:

yellowBlock.removeFromSuperview()
yellowBlock.removeConstraints(yellowBlock.constraints())
self.view.addSubview(yellowBlock)
yellowBlock.setTranslatesAutoresizingMaskIntoConstraints(false)

благодарю вас,


Ответы:


1

Это происходит потому, что ограничения имеют направления и не работают как отступы в CSS. Если вы прочитали документацию для limitedWithItem:attribute:relatedBy: toItem:attribute:multiplier:constant: Вы увидите, что attr1 является атрибутом представления для левой стороны ограничения. Attr2 соответствует правой части ограничения.

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

03.02.2015
Новые материалы

Запуск LF Internship v2 (1 апреля - 1 октября 2019 г.)
Вот и открылись двери к великолепию 😃. Как и было обещано, заявки на стажировку принимаются с 7 января по 28 февраля 2019 г. . Нажмите ссылку, чтобы подать заявку:..

BCACTF 4.0 Writeup — Freebee (Интернет)
Описание вызова: Я хочу прочитать эту действительно классную статью, но у них есть платный доступ. Вы можете мне помочь? Веб-адрес вызова: http://challs.bcactf.com:30771/ . Если вы..

Что такое обещание в JavaScript?
Быстрое и объективное объяснение обещаний в JavaScript World. Определение Промис — это объект, содержащий действие, которое еще не завершено, другими словами, оно все еще выполняется и в..

Рекурсивный отбор признаков: добавление или устранение?
Умный способ осуществить исчерпывающий выбор функций При построении модели машинного обучения иметь больше функций важнее, чем меньше. Но использование только тех, которые вам нужны, более..

Как не терять концентрацию во время программирования
Вы когда-нибудь чувствовали, что каждый час каждого дня засыпают текстами, электронными письмами, сообщениями, твитами и личными перерывами? Реальность такова, что Мы живем в мире, где все..

Сортировка ключей объекта в JavaScript
Если вы работаете с JavaScript, вы можете столкнуться с ситуацией, когда вам нужно отсортировать ключи объекта. Вот руководство, которое поможет вам отсортировать ключи объекта в JavaScript. Шаг..

Neovim для начинающих — Удаленная отладка Python
Настройте удаленную отладку для докеризованного приложения Python. В этой статье мы узнаем, как отлаживать приложение Python, работающее внутри контейнера Docker. Эта статья является..