我对UIView的界限和框架有点困惑。我正在手动创建UIButton,其大小与其超级视图相同:
UIButton *button = [[UIButton alloc]initWithFrame:aView.bounds];
button.backgroundColor = [UIColor blueColor];
[aView addSubview:button];
但在模拟器中,按钮及其超视图具有不同的大小。我真的不明白这个..
(我没有使用IB创建按钮,因为接下来我想在超级视图中创建一个2D按钮阵列,所以我想也许最好手动创建它们)
答案 0 :(得分:2)
我强烈怀疑您在视图有机会完成其子视图的布局之前将代码放在viewDidLoad
中。请将代码移至viewDidLayoutSubviews
。
答案 1 :(得分:1)
使用aView.frame而不是aView.bounds是正确的。两者都会给你大小(aView的宽度和高度)但框架会在超级视图中为你提供aView的位置。该按钮需要相对于aView而不是aView的superview的位置。 Bounds将在您自己的坐标系中给出aView的位置(很可能是0,0)。
在确定aView的帧之前,您正在使用aViews大小创建按钮。什么时候确定aView的框架?是否通过界面构建器创建了aView?你什么时候创建按钮?
答案 2 :(得分:0)
您提供的代码确实有效 - 这是使子视图与其超级视图大小相同的正确方法。您认为没有发生的原因有两种可能的解释:
您可能会错误地解释您在模拟器中看到的内容。您在按钮后面看到的视图可能不是aView
。我打算减少这种可能性并采用第二种可能性:
您在aView
达到最终大小之前运行该代码。换句话说,您正在插入button
,但随后出现布局并更改aView
的大小。 aView
大小的变化不会改变button
的大小,因此button
的大小为aView
在你创建并插入它的时候。