当一个label要显示以下效果的时候:
很容易,设置文本居中就好了label.textAlignment = NSTextAlignmentCenter。
但是有的时候可能需要文本周围有留白空间,但文本又不是居中的比如这样:
见过很多代码在实现这种情况的时候,都是给label在包了一层view,然后调整label的控件位置,实际上还有跟符合业务场景的代码实现方案,给文本控件增加一个内边距的效果。
实现原理文本控件默认的绘制区域就是当前控件的bounds,常用的Button和Tableview控件都有contentEdgeInsets属性来声明一个内边距,而label没有,所以当控件默认左对齐的时候,文本在控件中的左边间距就是0,可以在子类中定义一个类似contentEdgeInsets的属性,然后重写label的以下两个方法,来实现内边距的效果,而且在用约束进行布局的时候这个内边距也是有效果的,我就直接贴其他同事已经封装好的代码:
#pragma mark - 重写
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
UIEdgeInsets insets = self.zb_contentEdgeInset;
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;
}
- (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.zb_contentEdgeInset)];
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)