您的位置:首页 > 其它

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

2016-03-12 13:10 381 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: