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