2016-12-05 8 views
1

Я инициализируюсь два button в StoreTabView.swift:Bounds.size.width не реальная ширина

@IBDesignable class StoreTabView: UIView

store_button = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: self.bounds.size.width/2.0, height: self.bounds.size.height)) 

user_button = UIButton.init(frame: CGRect.init(x: self.bounds.size.width/2.0, y: 0, width: self.bounds.size.width/2.0, height: self.bounds.size.height)) 

И в моей раскадровке я поставил класс в view «с до StoreTabView и установите constrains :

enter image description here

И я нахожу self.bounds.size.width не является реальной шириной, в моем simulator-5s логическое разрешение должно быть 320, а не 375, но в Debug View Hierarchy я нашел 375.

enter image description here

И в консоли напечатать два button показать деталь:

<UIButton: 0x7fd79be63620; frame = (187.5 0; 187.5 45); opaque = NO; layer = <CALayer: 0x60000023a9e0>> 
Printing description of $7: 
<UIButton: 0x7fd79be63360; frame = (0 0; 187.5 45); opaque = NO; layer = <CALayer: 0x60000023a8e0>> 

Мы можем видеть width является 187.5, равна 375/2, поэтому, self.bounds.size.width почему не 320 ? как сделать его 320 шириной? потому что ширина button должна быть 160, а не 187.5.

+0

Где вы проверяете self.bounds.size.width? Если вы проверяете класс контроллера вида, он должен быть self.view.bounds.size.width –

+0

@Bhavuk Jain, я отредактировал мой вопрос, сделайте детальную информацию о проблеме, пожалуйста, проверьте. – aircraft

+0

, чтобы вы могли видеть себя, печатать, ограничивать/кадр вместе, чтобы вы видели их разницу ... – Honey

ответ

0

Почему бы не использовать автоматическую компоновку? В этом вопросе легче контролировать и создавать представления. Если вы создаете кнопки из кода, я думаю, вы не используете раскадровку. Тогда ограничение, которое вы ищете, выглядит так.

buttonsSuperview.addConstraint(NSLayoutConstraint(item: button, attribute: .width, relatedBy: .equal, toItem: buttonsSuperview, attribute: .width, multiplier: 0.5, constant: 1.0)) 

Конечно, вам понадобится больше, чем это ограничение (также для высоты и положения).

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

1

Очистить ваши основы -

Границы с UIView представляет собой прямоугольник, выраженный как местоположение (х, у) и размер (ширина, высота) по отношению к своей собственной системе координат (0,0).

Рамка UIView представляет собой прямоугольник, выраженный как местоположение (x, y) и размер (ширина, высота) относительно надзора, в котором он содержится.

Спасибо позже :)

+0

Как вы можете видеть в моем вопросе, работающий симулятор - '5c', и я установил' contraints' в 'StoreTabView'. – aircraft

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