2015-03-22 3 views
0

Если я создаю стандартный UIView let aView = UIView() и добавлю к нему ограничения, то программа будет отображаться на экране.Пользовательский UIView с использованием ограничений программно

Однако, если я создаю пользовательское представление, которое наследует от UIView class CustomView: UIView, тогда создайте экземпляр этого представления let aView = CustomView() и добавьте ему ограничения, вид не появится на экране. Но если я добавлю экземпляр пользовательского представления с фреймом let aView = CustomView(frame: CGRectMake(0,0,100,100)), появится пользовательское представление.

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

Обновлено:

Мои ограничения

let leftConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 50) 

let topConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0) 

let rightConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: 0) 

let bottomConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 20) 

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

Можно ли это сделать?

+0

Нет, вам не нужно предоставлять кадр вручную, если вы используете автозапуск. Можете ли вы поделиться ограничениями, которые вы применяете к 'aView', когда они не появляются, и кто-то может помочь. – rickerbh

ответ

1

Я делаю предположение, о котором вы говорите programatic ограничения:

Убедитесь, что UIView имеет следующие ограничения:

Горизонтальное позиционирование ограничение Вертикальное позиционирование Constraint

Горизонтальное Определение размеров Constraint (ширина) Вертикальное ограничение размеров (высота)

Без ограничения ширины и высоты ваш вид нарисован. Но он будет иметь ширину 0 и 0, поэтому вы не сможете ее увидеть.

Вот пример.

 // dictionary for views 
    let viewsDictionary = [  "aView": aView] 
    // dictionary for metrics 
    let metricsDictionary = [ "ViewHeight":90] 

// this places your UIVIew 16 points from the left, and makes it take up the rest of the space to the right. (until your self.view ends) 
self.view.addConstraints(
      NSLayoutConstraint.constraintsWithVisualFormat(
       "H:|-16-[aView]|", options: nil, metrics: nil, views: viewsDictionary)) 

// This constraint places it 32 points from the top. And gives it a height of 90 
self.view.addConstraints(
      NSLayoutConstraint.constraintsWithVisualFormat(
       "V:|-32-[aView(viewHeight)]", options: nil, metrics: metricsDictionary, 
       views: viewsDictionary)) 

и убедитесь, что вы отключили autoLayout для UIView.

Перед тем, как добавить его в качестве подтаблицы добавьте следующую строку:

aView.setTranslatesAutoresizingMaskIntoConstraints(false) 

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

+0

Есть ли способ установить ограничения без установки ширины и высоты представления? Просто установив ограничения сверху, снизу, слева и справа? (Я обновил свой вопрос с моими текущими ограничениями) –

+0

да, конечно. Например, вместо установки заданной высоты, если вы хотите, чтобы она начала 32 точки сверху и 64 снизу. Вы просто изменили бы это на '' V: | -32- [aView] -64- | "' Тогда это заняло бы остальную часть пространства. – MLyck

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