通过保持边距以编程方式调整UIButton的大小

时间:2011-01-02 09:50:04

标签: iphone cocoa-touch uitableview

我正在以编程方式将一个UIButton添加到tableView页脚。此按钮的左右边距等于tableView边距:

UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

deleteButton.frame = CGRectMake(10, 60, 300, 34);
deleteButton.autoresizingMask = UIViewAutoresizingFlexibleWidth

我正在添加autoresizingMask,因为我想支持旋转。但是,它不能按我的意思工作,因为按钮一直向下延伸到右侧,如下图所示。

知道怎么解决吗?如果我删除自动调整属性,则边距是正确的。

alt text

1 个答案:

答案 0 :(得分:1)

UITableView调整- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section返回的视图(及其所有子视图)的大小。要解决您的问题,您需要一个包装器视图来布局UIButton而不使用自动调整大小。以下是此类UIView类的示例实现:

@interface ButtonWrapperView : UIView {
    UIButton *_button;
}

@property (nonatomic, readonly) UIButton *button;

@end


@implementation ButtonWrapperView

@synthesize button = _button;

- (id)init
{
    if ((self = [super initWithFrame:CGRectZero])) {
        _button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
        [self addSubview:_button];
    }
    return self;
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    // Layout button
    _button.frame = CGRectMake(10.0f, 0.0f, self.bounds.size.width - 20.0f, self.bounds.size.height);
}

- (void)dealloc
{
    [_button release];
    [super dealloc];
}

@end

只需在- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section中返回此视图,您的按钮就会正常显示。

我还uploaded a sample project完全实现了上述解决方案。