iOS - 手动创建给定大小的 UIButton
iOS - create UIButton manually with given size
我对 UIView 的边界和框架有点困惑。我正在手动创建 UIButton,其大小与其超级视图相同:
UIButton *button = [[UIButton alloc]initWithFrame:aView.bounds];
button.backgroundColor = [UIColor blueColor];
[aView addSubview:button];
但是在模拟器中按钮和它的超级视图有不同的大小。这个我不是很懂..
(我没有使用 IB 创建按钮,因为接下来我想在该超级视图中创建一个二维按钮阵列,所以我认为手动创建它们可能更好)
您提供的代码确实有效 - 这是使子视图与其父视图大小相同的正确方法。对于您认为没有发生的原因,有两种可能的解释:
您可能误解了您在模拟器中看到的内容。您在按钮后面看到的视图可能不是 aView
。我要排除这种可能性并选择第二种可能性:
您是 运行 在 aView
达到最终大小之前的代码。换句话说,您正在插入 button
,但随后出现布局并更改 aView
的大小。 aView
大小的变化不会改变 button
的大小,因此 button
保留大小 aView
used 在您创建和插入它时拥有。
您使用 aView.frame 而不是 aView.bounds 是正确的。两者都会为您提供大小(aView 的宽度和高度),但 frame 为您提供 aView 在其超级视图中的位置。该按钮将需要相对于 aView 而不是 aView 的超级视图的位置。 Bounds 会给你一个视图在它自己的坐标系中的位置(很可能是 0, 0)。
可能发生的情况是您在确定 aView 的框架之前使用 aView 的大小创建按钮。什么时候确定aView的框架? aView 是通过界面生成器创建的吗?你什么时候创建按钮?
我强烈怀疑您是在视图有机会完成其子视图布局之前将代码放入 viewDidLoad
。将您的代码移至 viewDidLayoutSubviews
。
我对 UIView 的边界和框架有点困惑。我正在手动创建 UIButton,其大小与其超级视图相同:
UIButton *button = [[UIButton alloc]initWithFrame:aView.bounds];
button.backgroundColor = [UIColor blueColor];
[aView addSubview:button];
但是在模拟器中按钮和它的超级视图有不同的大小。这个我不是很懂..
(我没有使用 IB 创建按钮,因为接下来我想在该超级视图中创建一个二维按钮阵列,所以我认为手动创建它们可能更好)
您提供的代码确实有效 - 这是使子视图与其父视图大小相同的正确方法。对于您认为没有发生的原因,有两种可能的解释:
您可能误解了您在模拟器中看到的内容。您在按钮后面看到的视图可能不是
aView
。我要排除这种可能性并选择第二种可能性:您是 运行 在
aView
达到最终大小之前的代码。换句话说,您正在插入button
,但随后出现布局并更改aView
的大小。aView
大小的变化不会改变button
的大小,因此button
保留大小aView
used 在您创建和插入它时拥有。
您使用 aView.frame 而不是 aView.bounds 是正确的。两者都会为您提供大小(aView 的宽度和高度),但 frame 为您提供 aView 在其超级视图中的位置。该按钮将需要相对于 aView 而不是 aView 的超级视图的位置。 Bounds 会给你一个视图在它自己的坐标系中的位置(很可能是 0, 0)。
可能发生的情况是您在确定 aView 的框架之前使用 aView 的大小创建按钮。什么时候确定aView的框架? aView 是通过界面生成器创建的吗?你什么时候创建按钮?
我强烈怀疑您是在视图有机会完成其子视图布局之前将代码放入 viewDidLoad
。将您的代码移至 viewDidLayoutSubviews
。