2015-07-16 4 views
1

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

подход: Я программно делать все мое расположение с помощью NSLayoutConstraints (примечание, используя Xamarin C#, а не Objective C), так что я пытаюсь программно переключаться между набором «видимых» ограничений (нормальное расположение , это всегда работало нормально) и «скрыть» ограничения, которые устанавливают ширину и высоту в ноль.

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

NSLayoutConstraint c1 = NSLayoutConstraint.Create(view, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0f, 0f); 

Я проверяю ограничение c1, множитель равен 1, а константа равна 0. view - это представление, к которому я добавляю ограничение (UIButton в этом случае).

Вопрос: Можно ли установить множитель ограничений автоопределения в 0? Если да, есть ли что-то особенное в отношении UIButton, что мешает мне это делать? В идеале, я хотел бы иметь возможность сделать это шоу/скрыть практически для любого UIView.

ответ

3

0 множитель был сломан/«считается глупым» в iOS8.

Решение установить константу в 0 и оставить множитель на 1.

+0

Ах, поэтому со вторым элементом (представлением), который является «null» и вторым атрибутом «NoAttribute», множитель 1 и константа 0 эффективно вычисляет ширину до 0? Мне это кажется странным, особенно если оно эффективно приравнивается к 0, почему бы просто не дать мне поставить 0! Я сделаю это. – Camputer

+0

В iOS 7 существовали допустимые условия, которые были запрещены в 8. Множители 0, выравнивая левые края к передним краям, два имени два. – MongoTheGeek

+0

Цветение раздражает вместе с предотвращением мультипликативной анимации/настройки – Sam

3

CGFLOAT_MIN отлично работает для меня.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). - [Из обзора] (/ review/low-quality-posts/10360443) – honk

+1

CGFLOAT_MIN очень близок к нулю. Да, вы не можете установить его на ноль. –

+0

Пожалуйста, отредактируйте ваше сообщение и разместите информацию из своего комментария прямо в своем сообщении. Возможно, вы также можете объяснить, как использовать то, что вы предлагаете. ИМХО, которое превратило бы ваш комментарий, как сообщение, в правильный ответ. Мы в SO стремимся поддерживать высокое качество вопросов и ответов. Благодарим за вклад! – honk

0

комплект множителя для 0.000001 работает для меня.

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