2015-09-04 24 views
3

我有一个UIButton(在界面构建器中创建),我将它设置为button.layer.borderRadius = button.frame.size.width/2.0;(以编程方式,在viewDidAppear :)中变成了一个圆圈。但是,它所属的viewController是通过动画模式呈现的。由于viewDidAppear在转换动画结束之后才会调用,因此该按钮在此之前是方形的,这使得突然变化非常刺耳。在viewDidAppear之前获取UIButton宽度,使用AutoLayout

我不能在viewDidLoad设置半径,因为按钮属性不正确,然后(宽度太大),我认为这是因为自动布局约束尚未得到妥善解决。我试图通过调用viewDidLoad中的[self.view setNeedsLayout],然后设置cornerRadius来修正此问题,但按钮宽度仍然不正确。我不明白的是,在动画过程中,所有东西都能正确渲染,表明自动布局约束/已经解决,或者iOS以快速动画的名义做其他事情(比如存储快照预览以用于动画)。

有什么建议吗?

的尝试设置圆角半径在viewDidLoad中的结果:

The result of trying to set the corner radius in viewDidLoad

回答

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]; 

如果还是你的问题,然后分享您的约束,你添加按钮,并在那里你这样做的代码。

0

你的控制得到约束和框架集viewDidLoad中后,AMD的viewDidLoad之后就可以viewDidAppear之前得到您的要求viewwilllayoutsubviews或viewdidlayoutsubviews

0

怎么样

-(void) viewWillAppear:(BOOL)animated 
3

覆盖的UIButton并使其layoutSubviews方法像这样:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.layer.cornerRadius = self.bounds.size.width/2.f; 
} 

然后每当按钮的si泽改变它将调整它的价值。 也加入buttonWithType:initWithFrame:,因为我不确定是否在初始化后调用了layoutSubviews

+0

我接受了最好的答案,因为它更直接地回答了我问的问题,但对于我的情况,这是我认为的更好的解决方案。非常感谢。 – user2589494

+0

这只适用于按钮是方形的。调用'sizeToFit()'使其具有有意义的大小后,它通常将是矩形。 –

相关问题