美文网首页昊轩的个人专题
iOS UIButon的UIEdgeInsets(自定义文字与图

iOS UIButon的UIEdgeInsets(自定义文字与图

作者: Z灬昊轩 | 来源:发表于2019-03-26 14:32 被阅读16次

    UIButtonEdgeInsets使用:

    闲话少说,先上Demo

    github地址:https://github.com/Jerryisme/UIButtonEdgeInsets

    此Demo中分别通过继承(ZREdgeInsetsCustomerButton)和类别(UIButton+ZREdgeInsets)两种方式来调整UIButton的imageEdgeInsets和titleEdgeInsets属性,实现文字与图片的布局.

    ※满足UI设计即可,图片要求不可大于UIButton的Size.如果过于复杂,建议自定义UIView

    Demo效果图

    除此外,Demo的TestViewController中还列举了整体偏移(设置contentEdgeInsets来实现)和扩大图片点击区域(设置imageEdgeInsets来实现)的例子.如下图:


    功能相对比较简单,唯一的好处就是可以下载Demo,直接拖进去就能用.当然,如果介意前面的ZR的话,一个一个修改太麻烦.教大家一个一键去除的方法,记得.h和.m里面都要修改.
    1.command + F搜索当前页代码;
    2.将输入框旁边的Find下拉选择Replace;
    3.上方输入"想要修改的",下方输入"将要改成的";
    4.最后点击右侧的All,就全部替换掉了.

    Demo要说的就这么多了,现在我要来讲一下我的理解,因为是个人理解,欢迎大家指正和提出问题,希望能和大家共同成长.

    contentEdgeInsets

    @property(nonatomic)          UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR; // 外观属性选择器的标志
    //default is UIEdgeInsetsZero. On tvOS 10 or later, default is nonzero except for custom buttons.(在苹果电视系统10或以后,除了自定义,否则默认是非零的)
    

    按钮的内容整体(包含titleLabel和imageView)进行偏移.

    imageEdgeInsets&& titleEdgeInsets

    @property(nonatomic)          UIEdgeInsets titleEdgeInsets;                // default is UIEdgeInsetsZero
    @property(nonatomic)          UIEdgeInsets imageEdgeInsets;                // default is UIEdgeInsetsZero
    

    在我看来,titleLabel和imageView虽然是UIButton内的两个控件,但是它们也是一个整体,它们是针对当前位置(UIButton的contentRect)而不是针对距离UIButton边框的距离.也就是设置的对齐方式(contentVerticalAlignment和contentHorizontalAlignment)来控制的.//这句话不怎么好理解,可能表述的不清晰.

    对齐方式contentVerticalAlignment和contentHorizontalAlignment
    @property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;     // 
    // how to position content vertically inside control. default is center
    typedef NS_ENUM(NSInteger, UIControlContentVerticalAlignment) {
        UIControlContentVerticalAlignmentCenter  = 0, // 水平方向-居中
        UIControlContentVerticalAlignmentTop     = 1, // 水平方向-左对齐
        UIControlContentVerticalAlignmentBottom  = 2, // 水平方向-右对齐
        UIControlContentVerticalAlignmentFill    = 3, // 水平方向-拉伸,图片可能会被拉大
    };
    @property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; //
    // how to position content horizontally inside control. default is center
    typedef NS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {
        UIControlContentHorizontalAlignmentCenter = 0, // 竖直方向-居中
        UIControlContentHorizontalAlignmentLeft   = 1, // 竖直方向-顶部
        UIControlContentHorizontalAlignmentRight  = 2, // 竖直方向-底部
        UIControlContentHorizontalAlignmentFill   = 3, // 竖直方向-拉伸,图片可能被拉大
        UIControlContentHorizontalAlignmentLeading  API_AVAILABLE(ios(11.0), tvos(11.0)) = 4, // 竖直方向-首对齐
        UIControlContentHorizontalAlignmentTrailing API_AVAILABLE(ios(11.0), tvos(11.0)) = 5, // 竖直方向-尾对齐
    };
    

    UIEdgeInsets

    typedef struct UIEdgeInsets {
        CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to 'outset'
    } UIEdgeInsets;
    浮点型  上,  左,  下,  右;  //对每条边向内方向的偏移量,可以为正值(向内偏移)也可以为负值(向外偏移)
    

    contentVerticalAlignment---contentHorizontalAlignment---UIEdgeInsets注释写的比较清晰,直接看注释就可以啦.

    最后,觉得有用记得给个喜欢❤️!非常感谢!

    github地址:https://github.com/Jerryisme/UIButtonEdgeInsets
    简书个人主页:https://www.jianshu.com/u/281c41cc90bc

    相关文章

      网友评论

        本文标题:iOS UIButon的UIEdgeInsets(自定义文字与图

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