美文网首页
iOS开发 - 给UILable自定义一个内边距属性(conte

iOS开发 - 给UILable自定义一个内边距属性(conte

作者: 俺不是大佬儿 | 来源:发表于2019-12-06 10:53 被阅读0次

UILable自定义内边距属性(UIEdgeInsets contentInset)

UILabel没有类似于UITextView中的contentInset属性可以自定义设置显示内容的内边距

可以通过给UILabel添加类目扩展自定义一个contentInset属性实现设置UILabel的内边距

给UILable添加扩展类目(UILabel+Insets)
UILabel+Insets.h 文件
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UILabel (Insets)
/**
和UITextView相似,内边距属性
控制字体与控件边界的间隙
*/
@property (nonatomic, assign) UIEdgeInsets contentInsets;
@end
NS_ASSUME_NONNULL_END
UILabel+Insets.m 文件
#import "UILabel+Insets.h"

@implementation UILabel (Insets)
static char kContentInsetsKey;

static char kShowContentInsetsKey;
- (void)setContentInsets:(UIEdgeInsets)contentInsets{
    objc_setAssociatedObject(self, &kContentInsetsKey, NSStringFromUIEdgeInsets(contentInsets), OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &kShowContentInsetsKey, @YES, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (UIEdgeInsets)contentInsets{
    return UIEdgeInsetsFromString(objc_getAssociatedObject(self, &kContentInsetsKey));
}
+ (void)load{
    [super load];
// class_getInstanceMethod()
    Method fromMethod = class_getInstanceMethod([self class], @selector(drawTextInRect:));
    Method toMethod = class_getInstanceMethod([self class], @selector(tt_drawTextInRect:));
// class_addMethod()
    if (!class_addMethod([self class], @selector(drawTextInRect:), method_getImplementation(toMethod),
                         method_getTypeEncoding(toMethod))) {
        method_exchangeImplementations(fromMethod, toMethod);
    }
}

- (void)__drawTextInRect:(CGRect)rect{
    id show = objc_getAssociatedObject(self, &kShowContentInsetsKey);
    if (show) {
        rect = UIEdgeInsetsInsetRect(rect, self.contentInsets);
    }
    [self __drawTextInRect:rect];
}
@end
使用效果杠杠滴
label.contentInsets = UIEdgeInsetsMake(10.f, 10.f, 10.f, 10.f)
效果对比
效果对比

感觉好用请给个赞👍谢谢!

相关文章

  • iOS开发 - 给UILable自定义一个内边距属性(conte

    UILable自定义内边距属性(UIEdgeInsets contentInset) UILabel没有类似于U...

  • 给UILable设置内边距

    前两天公司项目遇到标签内容距离边框保持一定距离的需求,如图: 以前遇到这种需求,我肯定先计算文字的内容大小,再在内...

  • UILabel之Inset

    最近项目中想要设置UILabel中文字的内边距也就是所谓的Inset,在UILable中没有发现类似的属性,一顿G...

  • 小程序基础知识 --- padding和margin

    一: padding:简写属性在一个声明中设置所有内边距属性。设置所有当前或者指定元素内边距属性。该属性可以有1到...

  • 盒模型

    1.盒模型包括哪些属性 内容content、内边距padding、边框border、外边距margin 内边距、边...

  • iOS 自带内边距可变高度的Label

    iOS自带的UILabel是不带内边距的,需要自定义一个Label,重写系统的方法。自定义高度需要设定一个最高高度...

  • iOS UILabel增加内边距属性

    在某些场景我们想让Label像UIButton这种控件一样,可以设置内容边距,来使整体布局可拓展性增强。刚好项目中...

  • css盒子-内外边距

    内边距(padding) padding属性用于设置内边距。 是指 边框与内容之间的距离。 padding-to...

  • 前端(四)

    内边距 内边距指的就是元素内容区与边框以内的空间。 使用padding属性来设置元素的内边距。 默认情况下widt...

  • web前端入门到实战:内边距属性、外边距属性

    一、内边距属性 1.定义:边框和内容之间的距离就是内边距 2.分开写 3.连写: 4.注意点: (1)给标签设置内...

网友评论

      本文标题:iOS开发 - 给UILable自定义一个内边距属性(conte

      本文链接:https://www.haomeiwen.com/subject/yfmsgctx.html