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