B3F484DD-ABF3-43EE-9D4B-5E3EB96D796E.png
使用xib布局银行cell的时候,突然发现****的星号不能与银行卡尾数垂直居中对齐,可能是由于*字体不和普通文字一样居中显示,废话不多说,直接上解决方案:
1.自定义UILabel, 添加edgeInsets属性
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface ZGKBankCardLabel : UILabel
@property(nonatomic, assign) UIEdgeInsets edgeInsets;
@end
NS_ASSUME_NONNULL_END
2.重写UILabel的- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines 和 - (void)drawTextInRect:(CGRect)rect 方法
#import "ZGKBankCardLabel.h"
@implementation ZGKBankCardLabel
/** 返回UILabel中内容所占的rect*/
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
UIEdgeInsets insets = self.edgeInsets;
CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)
limitedToNumberOfLines:numberOfLines];
rect.origin.x -= insets.left;
rect.origin.y -= insets.top;
rect.size.width += (insets.left + insets.right);
rect.size.height += (insets.top + insets.bottom);
return rect;
}
/** 在一定区域内显示出来UILabel的内容*/
- (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
}
3.通过设置自定义cell中的自定义label的edgeInset属性,来调整rect,使得*居中,需要注意的是赋值edgeInsets后,最好调用一下sizeToFit属性。
@implementation ZGKMeBankCardCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
self.backgroud.layer.cornerRadius = 10;
self.bankCardNum.text = @"1314";
self.bankCardNum.font = [UIFont systemFontOfSize:20];
self.selectionStyle = UITableViewCellSelectionStyleNone;
// 下面两句是重点代码
self.firstStarLabel.edgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);//设置内边距
self.secondStarLabel.edgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);//设置内边距
self.thirdStarLabel.edgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);//设置内边距
[self.firstStarLabel sizeToFit];//重新计算尺寸,会执行Label内重写的方法
[self.secondStarLabel sizeToFit];//重新计算尺寸,会执行Label内重写的方法
[self.thirdStarLabel sizeToFit];//重新计算尺寸,会执行Label内重写的方法
}
调整以后的结果如下:
95D92E8A-8ED1-42C4-BF71-3A5B071EED49.png