Bounds.size.width不是真正的宽度

时间:2016-12-05 08:06:27

标签: ios swift

我在button中初始化了两个StoreTabView.swift

@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 1}},我发现它是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>>

我们可以看到width187.5,等于375/2,因此,self.bounds.size.width为什么不是320?如何使它320宽?因为button的宽度应该是160而不是187.5

2 个答案:

答案 0 :(得分:1)

清除您的基础 -

UIView的边界是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度)。

UIView的框架是矩形,表示为相对于其所包含的超级视图的位置(x,y)和大小(宽度,高度)。

稍后再说:)

答案 1 :(得分:0)

为什么不使用自动布局?在这种情况下,它更容易控制和创建视图。如果你是从代码创建按钮,我猜你不会使用故事板。然后约束你正在寻找看起来像这样。

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

当然,你需要的不仅仅是这个约束(对于身高和位置)。

如果您使用的是故事板,那真的很容易。您将连接从按钮拖到它的超级视图,设置相等的宽度,然后只修改约束的乘数。