为UIImageViwe添加乘数时未获得UIImageView圆角边框

时间:2018-08-27 06:51:23

标签: objective-c swift uiimageview uiimage uistoryboard

在情节提要中,我对UIImageView应用了高度和宽度的乘数,然后我只想对边框进行四舍五入,因此我在下面的代码中不适用于所有iPhone。

_profileImgView.clipsToBounds = YES;
_profileImgView.layer.backgroundColor = color.CGColor;
_profileImgView.layer.cornerRadius =_profileImgView.frame.size.width/2;
_profileImgView.layer.borderColor = [UIColor colorWithRed:253.0/255.0 green:182.0/255.0 blue:43.0/255.0 alpha:100].CGColor;
_profileImgView.layer.borderWidth = 5.0f;

In iPhone5s

In iPhone 7Plus

2 个答案:

答案 0 :(得分:1)

由于拐角半径取决于帧大小,因此,只要帧大小发生变化,就需要对其进行更新。如果您在设计中使用情节提要板,则在调用viewDidLoad时将获得设计中 的帧大小。如果不同设备的帧大小不同,您将在以后的某个时间点在视图layoutSubviews或可能在视图控制器的viewDidLayoutSubviews中获得最终大小。

我建议的解决方案是子类UIImageView并将图像视图的详细信息放在awakeFromNiblayoutSubviews中,然后在适当的地方使用此类而不是UIImageView。

// CircularImageView.h
#import <UIKit/UIKit.h>

@interface CircularImageView : UIImageView

@end

// CircularImageView.m
@implementation CircularImageView

- (void)awakeFromNib {
    [super awakeFromNib];

    self.clipsToBounds = YES;
    self.layer.borderColor = [UIColor colorWithRed:253.0/255.0 green:182.0/255.0 blue:43.0/255.0 alpha:100].CGColor;
    self.layer.borderWidth = 5.0f;
}

- (void)layoutSubviews {
    [super layoutSubviews];

    self.layer.cornerRadius = self.frame.size.width / 2;
}

@end

答案 1 :(得分:0)

在相同的Viewcontroller类中实现此代码对我来说很有用

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    _profileImgView.clipsToBounds = YES;
_profileImgView.layer.backgroundColor = color.CGColor;
_profileImgView.layer.cornerRadius =_profileImgView.frame.size.width/2;
_profileImgView.layer.borderColor = [UIColor colorWithRed:253.0/255.0 green:182.0/255.0 blue:43.0/255.0 alpha:100].CGColor;
_profileImgView.layer.borderWidth = 5.0f;

}