Search code examples
iosuitableviewuiviewcgrectmake

Unable to center a imageView in a tableView Footer


I am trying to center a label and an image in a tableView Footer

I can't seem to make it work for both device iPhone and iPad

Right now it is centered on the iPhone but that's because I hardcoded it.

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)];
    [view setBackgroundColor:[UIColor clearColor]];
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 15, self.view.bounds.size.width, 20)];
    lbl.lineBreakMode = NSLineBreakByWordWrapping;
    lbl.numberOfLines = 0;
    [lbl setText:@"Powered By"];
    [lbl setFont:[UIFont systemFontOfSize:10]];
    [lbl setTextAlignment:NSTextAlignmentCenter];
    [lbl setTextColor:[UIColor blackColor]];

    District *school = [District new];

    UIImageView  * logoView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 25, 150, 37.5)];
    logoView.image = [UIImage imageNamed:@"Logo.png"];

    [logoView autoresizingMask];
    [view addSubview:logoView];

    [view addSubview:lbl];

    return view;
}

I would like to center this view, without hardcoding it. I tried taking the screen size and divide by 2.

It did not center, what is the right approach, please advise.


Solution

  • You need to set the view's autoresizingMask as needed.

    - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)];
        [view setBackgroundColor:[UIColor clearColor]];
    
        CGRect lblFrame = view.bounds;
        lblFrame.origin.y = 15;
        lblFrame.size.height = 20;
        UILabel *lbl = [[UILabel alloc] initWithFrame:lblFrame];
        lbl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        lbl.lineBreakMode = NSLineBreakByWordWrapping;
        lbl.numberOfLines = 0;
        [lbl setText:@"Powered By"];
        [lbl setFont:[UIFont systemFontOfSize:10]];
        [lbl setTextAlignment:NSTextAlignmentCenter];
        [lbl setTextColor:[UIColor blackColor]];
    
        District *school = [District new];
    
        CGRect logoFrame = CGRectMake((view.bounds.size.width - 150) / 2.0, 25, 150, 37.5);
        UIImageView  * logoView = [[UIImageView alloc]initWithFrame:logoFrame];
        logoView.image = [UIImage imageNamed:@"Logo.png"];
    
        logoView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        [view addSubview:logoView];
    
        [view addSubview:lbl];
    
        return view;
    }
    

    This assumes the label should fill the width and the image should stay centered left-to-right.