2016-12-11 3 views
1

У меня есть пользовательский вид с двумя ярлыками под друг другом. Метод вида инициализации выглядит следующим образомiOS Custom View - init с CGRect.zero - Предупреждение о Constraint

self.locationView = LocationView(frame: CGRect.zero) 

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

 self.gMapsView.addConstraints(
     NSLayoutConstraint.constraints(
      withVisualFormat: "H:|-[locationView]-|", 
      options: NSLayoutFormatOptions(rawValue: UInt(0)), 
      metrics: nil, 
      views: views 
     ) 
    ) 

    self.gMapsView.addConstraints(
     NSLayoutConstraint.constraints(
      withVisualFormat: "V:[locationView]-(paddingBottom)-|", 
      options: NSLayoutFormatOptions(rawValue: UInt(0)), 
      metrics: [ 
       "paddingBottom": LOCATION_VIEW_CONFIG.paddingBottom 
      ], 
      views: views 
     ) 
    ) 

Для размещения метки внутри вида расположения я использую следующие ограничения:

 self.addConstraints(
     NSLayoutConstraint.constraints(
      withVisualFormat: "H:|[streetLabel]|", 
      options: NSLayoutFormatOptions(rawValue: UInt(0)), 
      metrics: nil, 
      views: views 
     ) 
    ) 

    self.addConstraints(
     NSLayoutConstraint.constraints(
      withVisualFormat: "H:|[cityLabel]|", 
      options: NSLayoutFormatOptions(rawValue: UInt(0)), 
      metrics: nil, 
      views: views 
     ) 
    ) 

    self.addConstraints(
     NSLayoutConstraint.constraints(
      withVisualFormat: "V:|-[streetLabel]-[cityLabel]-|", 
      options: NSLayoutFormatOptions(rawValue: UInt(0)), 
      metrics: nil, 
      views: views 
     ) 
    ) 

К сожалению, я получаю предупреждения ограничений:

(
"<NSAutoresizingMaskLayoutConstraint:0x608000280820 h=--& v=--& Test.LocationView:0x7fdc40f0c780.height == 0 (active)>", 
"<NSLayoutConstraint:0x608000280190 UILabel:0x7fdc40f0cb40.top == Test.LocationView:0x7fdc40f0c780.topMargin (active)>", 
"<NSLayoutConstraint:0x608000280320 V:[UILabel:0x7fdc40f0cb40]-(NSSpace(8))-[UILabel:0x7fdc40d155e0] (active)>", 
"<NSLayoutConstraint:0x6080002802d0 Test.LocationView:0x7fdc40f0c780.bottomMargin == UILabel:0x7fdc40d155e0.bottom (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x608000280320 V:[UILabel:0x7fdc40f0cb40]-(NSSpace(8))-[UILabel:0x7fdc40d155e0] (active)> 

Как я могу их исправить? Большое спасибо :)

ответ

0

Вам нужно отключить Autoresizing Mask, это первое ограничение (NSAutoresizingMaskLayoutConstraint), указанное там, которое противоречит тем, которые вы создали позже. Вы можете видеть, что он устанавливает высоту в 0. Добавить:

self.locationView.translatesAutoresizingMaskIntoConstraints = NO;

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

+0

Большое спасибо! У меня уже был этот код, но я назвал его после добавления представления в родительское представление. – user3532505

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

  • Нет связанных вопросов^_^