CS193p - Зима 2015 г. - Калькулятор Раскадровка Autolayout

Я работаю над частью Auto Layout задания Calculator Assignment последнего курса Stanford CS193p, используя последнюю версию Xcode в App Store (6.1.1 6A2008a).

Ограничения для Label для отображения работают правильно, но когда я выкладывал Button, Auto Layout, казалось, игнорировал присутствие Label. Даже после добавления ограничений, как в лекции, Button, кажется, игнорируют Label, хотя количество ограничений совпадает с количеством ограничений профессора Хегарти.

Макет «работает» так, но он не «правильный», и я хотел бы знать, что я здесь делаю неправильно, чтобы не попасть в плохие привычки автоматического макета.

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

https://github.com/krger/cs193p-2015/tree/master/Calculator

Буду признателен за любой вклад/руководство/предложения. Помимо этого, похоже, нет места, где «студенты» iTunes U могут обсудить курс.


person krger    schedule 01.03.2015    source источник


Ответы (5)


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

Чтобы исправить это:

  1. Избавьтесь от всех ваших ограничений.
  2. Добавьте ограничения для отображаемой метки.
  3. Выберите все свои кнопки и перетащите их вниз так, чтобы верхняя часть 7/8/9/x/sin была выровнена с нижней частью метки вашего дисплея.
  4. Добавьте ограничения обратно для ваших кнопок.

Другой способ исправить это, который работает, заключается в следующем:

  1. Удалите верхнее ограничение для каждой из кнопок 7/8/9/x/sin.
  2. В представлении «Макет документа» control перетащите от каждой из этих кнопок по очереди к метке дисплея и выберите Вертикальный интервал во всплывающем окне. Это добавит ограничение по вертикали к нижней части метки дисплея. Теперь вам просто нужно исправить константу.
  3. Нажмите на каждую из кнопок 7/8/9/x/sin по очереди. Отредактируйте ограничение Top Space в инспекторе размеров, изменив константу на 0 или 8.
person vacawama    schedule 01.03.2015
comment
Спасибо за быстрый ответ. Когда я первоначально размещал Button, я пытался выровнять их по нижней части дисплея Label, но я не получил синие направляющие линии для нижней части Label — только для верхней направляющей. Я снял все ограничения и начал заново. Я удалил дисплей Label и сделал новый, ограниченный сверху, слева и справа. Я сделал его выше, чем должен быть, чтобы он подсказал мне исправить высоту, чтобы она соответствовала ожидаемой. Даже сейчас я все еще не получаю направляющих для нижней части Label — только для верхней направляющей. Проверено в текущем коде. - person krger; 01.03.2015

У меня была такая же проблема, и после нескольких проб и ошибок у меня есть решение.

Хотя я не знаю фонового механизма системы автоматической компоновки Xcode, эта проблема, похоже, связана с «внутренним размером» UILabel.

Итак, в «Инспекторе размера» метки измените значение «Внутренний размер» с «По умолчанию (определено системой)» на «Заполнитель».

После этого вы сможете увидеть синюю направляющую линию.

В любом случае, если вы знаете, как это работает, пожалуйста, объясните причину. Спасибо.

person Min-ho Kim    schedule 13.03.2015

Примерно в 56:10 второй лекции он говорит, что если вы выберете свою метку, затем выберите «Восстановить рекомендуемые ограничения» на значке «Решить проблемы с автоматическим макетом», расположенном в правом нижнем углу (маленький треугольник между двумя вертикальными параллельными линиями). ), вы можете увидеть нижний край этикетки. Кажется, это исправило это для меня.

person halecommarachel    schedule 19.03.2015

У меня была очень похожая проблема, когда мои кнопки не демонстрировали поведения, которое, как они поняли, мне нужно поле 8 относительно верхней метки. Они просто удалялись от нижней части поля зрения.

Ну... проблема была именно в этом. Несмотря на установку 8 в верхнем ограничении (в разделе «Контакт» -> «Добавить новые ограничения»), полоса по-прежнему была отмечена точками. (Я бы разместил изображение, но не имеет достаточной репутации).

Вы должны убедиться, что при добавлении новых ограничений полоса становится твердой. Это означает, что система поняла ограничение.

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

person Mihnea Munteanu    schedule 13.05.2015

Я столкнулся с той же проблемой и смог решить ее, сняв ограничения, изменив размер метки и повторив попытку.

Я приложил скриншот моего размера, на котором автоматический макет работает правильно. Вы можете попробовать скопировать мои x=20, y=28 и height=38, как показано на панели инспектора размеров ниже:

Исправление метки автоматического макета

person Austin    schedule 22.06.2015