gpt4 book ai didi

ios - UIStackView 内出现意外的圆形 UIButton 行为

转载 作者:行者123 更新时间:2023-12-01 20:10:04 24 4
gpt4 key购买 nike

我为用户输入制作了一个很酷的自定义数字键盘。它由12个UIButtons组成3个内4个UIStackView s,它们本身嵌套在父 UIStackView 中.我希望按钮是圆形的。想要的外观是这样的:

enter image description here

这是圆角的代码:

for (UIStackView *subStack in self.mainStackView.arrangedSubviews)
{
for (UIButton *button in subStack.arrangedSubviews)
{
button.layer.borderWidth = 1.0f;
button.layer.borderColor = [[UIColor orangeColor] CGColor];
button.layer.cornerRadius = (button.frame.size.width)/2.0f;
button.layer.masksToBounds = YES;
button.clipsToBounds = YES;
[button setShowsTouchWhenHighlighted:YES];
NSLog(@"button.tag = %ld", (long)button.tag);
}
}
[self.view setNeedsLayout];

问题是当我把这段代码放入 viewDidLoadviewWillAppear ,按钮如下所示:

enter image description here

除非我将代码放入 viewDidAppear,否则不会显示完整的圆形按钮.但是在渲染圆圈之前有一个明显的延迟。

有人知道是什么导致了这种奇怪的行为吗?我想知道它是否与 UIStackViews 有关他们自己,因为我遇到了其他问题。

使用 Xcode 7.3.1 和 El Capitan 10.11.3

编辑

我在下面@Murat Tezyapar 的回答中尝试了这个建议,但是代码没有在 viewDidLayoutSubviews 中调用,也没有在 viewWillLayoutSubviews 中调用(我认为值得一试......)。我做了一些 NSLogging,发现只有在 viewDidAppear 中执行代码时,按钮才能达到适当的大小(70 pts)。如上所述,圆圈仍然在按钮本身和其他所有内容之后呈现。

最佳答案

这可能是因为在触发 viewWillAppear 和 viewDidLoad 时尚未设置 View 的框架。 viewDidLayoutSubviews 是一个很好的地方,因为此时所有约束都被考虑在内,并且 View 的大小会根据您的约束进行调整。看来您尝试访问 viewDidLoad 上的按钮框架并获取它们的初始值(例如:20 px 宽度和高度),而在 viewDidLayoutSubviews 上它应该是 50 px。

因此,当您设置角半径时:

button.layer.cornerRadius = (button.frame.size.width)/2.0f;

您无法获得正确的框架宽度,因此您在 50 像素宽度按钮上设置了 10.0 角半径。

结论:

如果您使用自动布局,请使用 viewDidLayoutSubviews。

关于ios - UIStackView 内出现意外的圆形 UIButton 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37910028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com