2014-10-20 7 views
0

Основная информация: Я только что закончил делать автоматическую компоновку, и когда я запустил ее, все это сработало. Затем я просматриваю командную строку, и она говорит об ошибке выше. Я пробовал искать его, но он просто показывает решения для Obj-C, и я делаю это в Swift. Как я смогу решить эту проблему автомакета?Невозможно одновременно удовлетворить ограничения - Swift

Ошибка:

2014-10-20 00:07:41.102 Fraction Calculator[74247:6698760] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7c440f10 V:[UIButton:0x7c440db0'Divide It!'(30)]>", 
    "<NSLayoutConstraint:0x7af7bdb0 V:[UIImageView:0x7af7bae0(8)]>", 
    "<NSLayoutConstraint:0x7ae928b0 V:[UITextField:0x7ae952d0(30)]>", 
    "<NSLayoutConstraint:0x7ae97110 V:[UITextField:0x7ae96f70(30)]>", 
    "<NSLayoutConstraint:0x7ae97eb0 V:[UILabel:0x7ae97d70'Enter Your Fraction To Be...'(48)]>", 
    "<NSLayoutConstraint:0x7ae99cd0 V:[_UILayoutGuide:0x7ae990c0]-(0)-[UILabel:0x7ae97d70'Enter Your Fraction To Be...']>", 
    "<NSLayoutConstraint:0x7ae9a000 V:[UILabel:0x7ae97d70'Enter Your Fraction To Be...']-(41)-[UITextField:0x7ae96f70]>", 
    "<NSLayoutConstraint:0x7ae9a090 V:[UITextField:0x7ae96f70]-(14)-[UIImageView:0x7af7bae0]>", 
    "<NSLayoutConstraint:0x7ae9a150 V:[UIImageView:0x7af7bae0]-(13)-[UITextField:0x7ae952d0]>", 
    "<NSLayoutConstraint:0x7ae9a270 V:[UITextField:0x7ae952d0]-(59)-[UIButton:0x7c440db0'Divide It!']>", 
    "<NSLayoutConstraint:0x7ae9a2a0 V:[UIButton:0x7c440db0'Divide It!']-(50)-[UILabel:0x7ae98df0]>", 
    "<NSLayoutConstraint:0x7ae9a300 V:[UILabel:0x7ae98df0]-(166)-[_UILayoutGuide:0x7ae99680]>", 
    "<_UILayoutSupportConstraint:0x7c441e80 V:[_UILayoutGuide:0x7ae990c0(20)]>", 
    "<_UILayoutSupportConstraint:0x7c441770 V:|-(0)-[_UILayoutGuide:0x7ae990c0] (Names: '|':UIView:0x7af7abc0)>", 
    "<_UILayoutSupportConstraint:0x7c443610 V:[_UILayoutGuide:0x7ae99680(0)]>", 
    "<_UILayoutSupportConstraint:0x7c4429d0 _UILayoutGuide:0x7ae99680.bottom == UIView:0x7af7abc0.bottom>", 
    "<NSLayoutConstraint:0x7c44acf0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7af7abc0(480)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7ae97eb0 V:[UILabel:0x7ae97d70'Enter Your Fraction To Be...'(48)]> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

Изображение моей Ограничений https://www.dropbox.com/s/1l3ys9k7bdr8qrk/Screenshot%202014-10-20%2021.08.47.png?dl=0 изображение моего iPhone 4 Предварительный просмотр https://www.dropbox.com/s/7uoulzppalex2r8/Screenshot%202014-10-20%2021.09.48.png?dl=0 Образ iPhone 4 в тренажере https://www.dropbox.com/s/c1qedgoytcnetri/iOS%20Simulator%20Screen%20Shot%20Oct%2020%2C%202014%2C%209.10.03%20PM.png?dl=0

Если вы, ребята, есть вопросы или нуждаются в уточнении, пожалуйста, комментарий внизу

+2

Какая разница, если решения, которые вы находите, находятся в Objective C? Это тот же API, поэтому вы можете тривиально переписать их в Swift. – sapi

ответ

4

Было бы немного трудно отследить, который является плохим ограничение, просто глядя на ошибки вы публикуемую. Но я могу дать общие правила или вещи, которые следует иметь в виду при работе с автоопределением или ограничениями вообще,

  • Предпочитаете ограничить настройку в XIB/Storyboards. Он скажет, где именно вы ошибетесь, когда вы их устанавливаете. Вы можете почти сделать все в построителе интерфейса, если это не особый случай.
  • Всегда устанавливайте ограничения по отношению к точкам вокруг. Попробуйте не исправить все, чтобы просмотреть.
  • Используйте ограничения по размеру, когда это возможно.
  • Попробуйте использовать внутренние ограничения ограничений размеров и избегать установки фиксированной ширины/высоты.
  • Помните, что вы всегда будете сталкиваться с теми ошибками, с которыми сталкиваетесь, когда вы устанавливаете слишком много ограничений. Поэтому всегда думайте, что ограничения «достаточно» для определения его фрейма во время выполнения. Не более или менее, но достаточно.
  • Используйте ограничения в отношении равенства, они очень полезны. Также не забывайте, что у вас есть приоритеты приоритетов и сопротивления сжатию.

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

литературы,

2

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

Я использую Xcode 6.1.1

"Ctrl + A", чтобы выбрать все UILabels, UIImages и т.д. меню Редактор -> Pin> (Выбрать ...) для SuperView снова нажмите кнопку Редактор - > Устранение проблем с автоматической компоновкой -> Добавить отсутствующие ограничения или Сбросить до требуемых ограничений. Это зависит от вашего дела.

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