iPhone - UITableViewController - Setting section header in portrait and landscape

守給你的承諾、 提交于 2019-12-12 04:20:51

问题


I'm having UITableView controller which uses custom section header view. When my device is portrait, its showing perfect. And when my device is landscape its perfect again. But when orientation changed during app runtime, its not updating my section view. What's the problem?

Using following code, I'm adding a label, and two buttons to a view and returning that view in "viewForHeaderInSection". During debugging I found that the method is getting called, but the section header view is not updating.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 80;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSDictionary* dict = [threadsArray objectAtIndex:section];

    UIView* headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 80)];
    headerView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.2];

    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 15, self.view.frame.size.width - 98, 21)];
    newLabel.textColor = [UIColor blackColor];
    newLabel.font = [UIFont boldSystemFontOfSize:17];
    newLabel.text = [dict objectForKey:@"Name"];
    newLabel.backgroundColor = [UIColor clearColor];
    [headerView addSubview:newLabel];

    UIButton* addButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
    addButton.frame = CGRectMake(self.view.frame.size.width - 88, 11, 29, 29);
    NSLog(@"%f %f %f %f",addButton.frame.origin.x,addButton.frame.origin.y, addButton.frame.size.width,addButton.frame.size.height);
    [addButton addTarget:self action:@selector(addThreadResponseClicked:) forControlEvents:UIControlEventTouchDown];
    [headerView addSubview:addButton];

    UIButton* expandCollapseButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [expandCollapseButton setImage:[UIImage imageNamed:@"Expand.png"] forState:UIControlStateNormal];
    expandCollapseButton.frame = CGRectMake(self.view.frame.size.width - 48, 11, 29, 29);
    NSLog(@"%f %f %f %f",expandCollapseButton.frame.origin.x,expandCollapseButton.frame.origin.y, expandCollapseButton.frame.size.width,expandCollapseButton.frame.size.height);
    [expandCollapseButton addTarget:self action:@selector(expandCollapseHeader:) forControlEvents:UIControlEventTouchDown];
    [headerView addSubview:expandCollapseButton];

    addButton.tag = expandCollapseButton.tag = section;
    return [headerView autorelease];
}

回答1:


Try setting the views autoresizing masks appropriately: eg for headerView;

[headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

and for addButton and expandCollapseButton set the AutoresizingMask to:

UIViewAutoresizingMaskFlexibleLeftMargin


来源:https://stackoverflow.com/questions/5133628/iphone-uitableviewcontroller-setting-section-header-in-portrait-and-landscap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!