iOS - 以给定大小手动创建UIButton

时间:2015-01-10 18:29:45

标签: ios uiview

我对UIView的界限和框架有点困惑。我正在手动创建UIButton,其大小与其超级视图相同:

UIButton *button = [[UIButton alloc]initWithFrame:aView.bounds]; 
button.backgroundColor = [UIColor blueColor]; 
[aView addSubview:button];

但在模拟器中,按钮及其超视图具有不同的大小。我真的不明白这个..

(我没有使用IB创建按钮,因为接下来我想在超级视图中创建一个2D按钮阵列,所以我想也许最好手动创建它们)

3 个答案:

答案 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 在你创建并插入它的时候。