iOS-設定微博導覽列中間title位置的按鈕的尺寸---setFrame----,ios導覽列按鈕的frame

來源:互聯網
上載者:User

iOS-設定微博導覽列中間title位置的按鈕的尺寸---setFrame----,ios導覽列按鈕的frame

#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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.