• 1014-32-首页13-cell的结构分析---导航栏中间title位置的按钮的尺寸设置---setFrame----


    #import "HWTitleButton.h"

    #define HWMargin 5

    @implementation HWTitleButton

    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            self.titleLabel.font = [UIFont boldSystemFontOfSize:17];
            [self setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
            [self setImage:[UIImage imageNamed:@"navigationbar_arrow_up"] forState:UIControlStateSelected];
        }
        return self;
    }

    // 目的:想在系统计算和设置完按钮的尺寸后,再修改一下尺寸
    /**
     *  重写setFrame:方法的目的:拦截设置按钮尺寸的过程
     *  如果想在系统设置完控件的尺寸后,再做修改,而且要保证修改成功,一般都是在setFrame:中设置
     */
    - (void)setFrame:(CGRect)frame   // 要彻底的修改 控件的尺寸,要再setFrame的基础上去改。
    {
        frame.size.width += HWMargin; // 在传来的 宽度 基础上再加 HWMargin; 要在 [super setFrame:frame];之前去加;

       // frame.origin.x += 10;
       // frame.origin.y += 20;


        [super setFrame:frame];
    }

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        // 如果仅仅是调整按钮内部titleLabel和imageView的位置,那么在layoutSubviews中单独设置位置即可
        
        // 1.计算titleLabel的frame
        self.titleLabel.x = self.imageView.x;
        
        // 2.计算imageView的frame;  imageView 里面放得是那个箭头图片
        self.imageView.x = CGRectGetMaxX(self.titleLabel.frame) + HWMargin;
    }

    - (void)setTitle:(NSString *)title forState:(UIControlState)state
    {
        [super setTitle:title forState:state];

        // 只要修改了文字,就让按钮重新计算自己的尺寸
        [self sizeToFit];
    }

    - (void)setImage:(UIImage *)image forState:(UIControlState)state
    {
        [super setImage:image forState:state];
        
        // 只要修改了图片,就让按钮重新计算自己的尺寸
        [self sizeToFit];
    }
    @end

  • 相关阅读:
    wireshark无法捕获无线网卡数据解决办法(failed to set hardware filter to promiscuous mode)
    用PHP检测用户是用手机(Mobile)还是电脑(PC)访问网站
    一次.net Socket UDP编程的10万客户端测试记录
    对象复制
    c#中volatile关键字的作用
    C#操作XML
    ASP.NET AJAX
    C#操作XMl2
    SQLServer 存储过程中不拼接SQL字符串实现多条件查询
    ASP.NET刷新页面的六种方法20081111 22:04asp.net页面刷新重是有问题,收藏几种方法挺有用的.
  • 原文地址:https://www.cnblogs.com/nxz-diy/p/5268474.html
Copyright © 2020-2023  润新知