1

Как я писал в this GitHub issue, у меня возникли проблемы с некоторыми скрытыми ограничениями, которые бросают ошибку всякий раз, когда я пытаюсь добавить свои собственные ограниченияПрограммной Установка Ограничения Причины конфликтов в Swift

2016-04-18 19:22:04.270 Metric Time[1519:447809] 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) 
(
"<NSAutoresizingMaskLayoutConstraint:0x15e670e70 h=--& v=--& Metric_Time.View:0x15e692e70.midX == + 115>", 
"<NSLayoutConstraint:0x15e5048c0 Metric_Time.View:0x15e692e70.centerX == UIView:0x15e6953e0.centerX>", 
"<NSAutoresizingMaskLayoutConstraint:0x15e55fd30 h=-&- v=-&- 'UIView-Encapsulated-Layout-Left' H:|-(0)-[UIView:0x15e6953e0] (Names: '|':UIWindow:0x15e688ed0)>", 
"<NSLayoutConstraint:0x15e54e750 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15e6953e0(320)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15e5048c0 Metric_Time.View:0x15e692e70.centerX == UIView:0x15e6953e0.centerX> 

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.` 

Я пытался ищу места что эти ограничения могли быть созданы, но поиск моего ViewController.swift файла для таких ключевых слов, как ограничение, макет .etc появился только код, который я написал.

Мой код все на GitHub, если кто-то хочет обходиться с ним.

ответ

2

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

 self.view.addSubview(clockView) 
     clockView.translatesAutoresizingMaskIntoConstraints = false 
     clockView.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor, constant: 0.0).active = true 
     clockView.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor, constant: 0.0).active = true 
     clockView.widthAnchor.constraintEqualToConstant(230.0).active = true 
     clockView.heightAnchor.constraintEqualToConstant(230.0).active = true 

Однако это не совсем то, что вы хотите, как, когда он находится в ландшафте ваших часов накладок этикетки. Но вы можете это исправить, играя с clockView.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor, constant: 0.0).active = true

+0

что делать, если я должен был использовать это на 'UIDatePicker()'? – DeveloperACE

+0

Вы можете сделать то же самое, но замените clockView на datePicker. Вам также не нужно добавлять ограничения ширины и высоты, так как UIDatePicker имеет собственный размер. – beyowulf

+0

ok, также @beyowulf, мой UIDatePicker выглядит немного странно, когда я проверяю иерархию представлений ... http://imgur.com/y0sq2RE https://gist.github.com/DeveloperACE/f551f8783e1fc01d600da3377c5308cd, что я делаю неправильно ? – DeveloperACE