iOS

iOS,第1张

应用场景

当一个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)];

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/996808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存