我有一个UIButton(在界面构建器中创建),我通过设置button.layer.borderRadius = button.frame.size.width / 2.0;
(以编程方式,在viewDidAppear :)中变成一个圆圈。但是,它所属的viewController以模态方式呈现动画。由于在转换动画完成之后才调用viewDidAppear
,因此按钮在此之前是方形的,这使得突然变化非常刺耳。
我无法在viewDidLoad
中设置半径,因为按钮属性不正确(宽度太大),我认为这是因为自动布局约束还没有得到妥善解决。我试图通过调用[self.view setNeedsLayout]
中的viewDidLoad
然后设置cornerRadius来解决这个问题,但按钮宽度仍然是错误的。我不明白的是,在动画期间,其他一切都正确呈现,表明自动布局约束/已经/已经解决,或者iOS以快速动画的名义做了其他事情(比如存储快照预览以便使用)为了动画)。
有什么建议吗?
尝试在viewDidLoad中设置角半径的结果:
答案 0 :(得分:6)
您可以在函数
- viewDidLayoutSubviews
中获取宽度。
答案 1 :(得分:3)
覆盖UIButton
并使其layoutSubviews
方法如下:
- (void)layoutSubviews {
[super layoutSubviews];
self.layer.cornerRadius = self.bounds.size.width/2.f;
}
然后,只要按钮的大小发生变化,它就会调整其值。
还要在buttonWithType:
和initWithFrame:
中添加,因为我不确定在初始化后是否调用了layoutSubviews
。
答案 2 :(得分:0)
抱歉,我没有把你弄好。正如您的屏幕截图所示,您的图像不是圆形的。为此,您可以尝试:(1)layer.cornerRadius = btn.frame.size.width / 2;或layer.CornerRadius = 50(如果宽度为100)
layer.masksToBounds = YES;
layer.borderWidth = 1.5; or whatever you want
layer.borderColor = [UIColor whiteColor];
如果问题仍然存在,请分享您在按钮上添加的约束以及您执行此操作的代码。
答案 3 :(得分:0)
你的控件在viewDidLoad之后得到约束和框架设置在viewDidLoad之后你可以在viewwilllayoutsubviews或viewdidlayupubviews中获取你的要求viewDidAppear
答案 4 :(得分:0)
怎么样
-(void) viewWillAppear:(BOOL)animated