1

I would like to set the bounds for my table view (in a UITableViewController) so that it has a smaller width than the screen width (so that a background image can be seen behind the table view). I use the following line of code in my viewDidLoad method:

  [[self tableView] setBounds:CGRectMake(10,44, 300, 460)]; 

However, this line is not working and the tableview still takes up the whole width of the page.

How can I make this work?

Also, as long as I'm on the subject of customizing table views, I would also like to change the font of the text in the cells. How would I go about doing that? Thank you.

user1072337
  • 12,615
  • 37
  • 116
  • 195

1 Answers1

5

A UITableViewController's view property is a UITableView. So you cannot shrink it's view to reveal what's behind, since there is nothing (At least as far as it's concerned) behind it.

There is a relatively easy solution. I'm assuming, based on your code sample that you have a UITableView property on your controller named "tableView", if not it's creation would be necessary.

1) Change your view controller to be a UIViewController subclass instead of a UITableViewController subclass. Easily done in the .h by replacing YourClass:UITableViewController with YourClass:UIViewController.

2) In the .xib file drag out a new UIView to the canvas (not on the tableView).

3) Drag the tableView to be a subview of the view, as shown: enter image description here

4) Connect the File's Owner's view property to be the UIView you just added.

5) Check that your connections look something like this: enter image description here

With these changes you can now set your frame to be smaller than your view's size. You have two choices how to do this: 1) Use code like this code:

-(void)viewDidLoad{
    [super viewDidLoad];
        // set background red to see change
    self.view.backgroundColor = [UIColor redColor];
    CGFloat sideMargin = 10;
    CGFloat topBottomMargin = 44;
    CGFloat originX = sideMargin;
        // compute width based on view size
    CGFloat sizeWidth = (self.view.bounds.size.width - (sideMargin * 2));
    CGFloat originY = topBottomMargin;
        // compute height based on view size
    CGFloat sizeHeight = (self.view.bounds.size.height - (topBottomMargin * 2));
        // set tableView frame
    self.tableView.frame = CGRectMake(originX, originY, sizeWidth, sizeHeight);
}

2) Change the setting in interface builder directly. Something like:

enter image description here

NJones
  • 27,139
  • 8
  • 70
  • 88