我在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
:
我发现self.bounds.size.width
不是真正的宽度,在我的simulator-5s
中,逻辑分辨率应该是320
而不是375
,而是Debug View Hierarchy
1}},我发现它是375
。
在控制台中,我打印了两个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 :(得分: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))
当然,你需要的不仅仅是这个约束(对于身高和位置)。
如果您使用的是故事板,那真的很容易。您将连接从按钮拖到它的超级视图,设置相等的宽度,然后只修改约束的乘数。