2

I am making a tableview programmatically for a calendar app, and and need to resize my tableviewcells according to the text they hold. I am trying to use auto layout but I can't get that to work for some reason

 - (void)viewDidLoad
{
    ......
    // Set up the table view
    self.tableView.tableHeaderView = imageView;
    self.tableView.tableHeaderView.backgroundColor = [UIColor whiteColor];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    self.tableView.estimatedRowHeight = 80.0f;
    self.tableView.rowHeight = UITableViewAutomaticDimension;

    [self.tableView registerClass:UITableViewCell.class
           forCellReuseIdentifier:@"cell"];
}

And here is my cellForRowAtIndexPath :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"
                                                            forIndexPath:indexPath];

    if(cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

    cell.detailTextLabel.textColor = [UIColor darkGrayColor];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    if(indexPath.row == TableViewRowTitleAndDate)
    {
        cell.textLabel.numberOfLines = 0;
        cell.textLabel.text = self.event.title;
        cell.detailTextLabel.numberOfLines = 0;

        //Get repeating status

        // Set date and time
        NSString *dateString  = [NSDateFormatter localizedStringFromDate:self.event.startDate
                                                               dateStyle:NSDateFormatterFullStyle
                                                               timeStyle:NSDateFormatterNoStyle];

        if(self.event.allDay)
        {
            cell.detailTextLabel.text = [NSString stringWithFormat:@"%@\nAll Day\nRepeats", dateString];
        }
        else
        {
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:@"h:mm a"];
            NSString *startTimeString = [formatter stringFromDate:self.event.startDate];
            NSString *endTimeString = [formatter stringFromDate:self.event.endDate];
            cell.detailTextLabel.text = [NSString stringWithFormat:@"%@\n%@ - %@\nRepeats", dateString, startTimeString, endTimeString];
        }
    }
}

But for some reason I cannot get autolayout to work. I also tried adding hightForRowAtIndexPath: method and returning UITableViewAutomaticDimension, but still no luck.

Also it might be helpful knowing I'm trying to set an image as the tableViewHeaderView which is downloaded using SDWebImage.

Here's the ScreenShot of the app : http://manikkalra.com/screen.png http://manikkalra.com/screen2.png

Any help would be greatly appreciated!

Uyghur Lives Matter
  • 18,820
  • 42
  • 108
  • 144
Manik Kalra
  • 41
  • 1
  • 7
  • http://stackoverflow.com/questions/27842764/uitableviewautomaticdimension-not-working-until-scroll – Blank Feb 03 '15 at 11:31

2 Answers2

3

Although this should be in my opinion automatically called by [tableView reloadData] (with the possibility to be overridden), it isn't. So here is the solution.

You must call :

[YOUR_TABLE_VIEW reloadSections:[NSIndexSet indexSetWithIndex:YOUR_SECTION_INDEX] withRowAnimation:YOUR_UITABLEVIEW_ANIMATION];

Right BEFORE (this is important)

[YOUR_TABLE_VIEW reloadData]

Options for YOUR_TABLE_VIEW_ANIMATION are : UITableViewRowAnimationBottom, UITableViewRowAnimationNone, UITableViewRowAnimationTop…

YOUR_SECTION_INDEX is an integer.

Hope this helps

Benjamin
  • 8,128
  • 3
  • 34
  • 45
0

just call tableView.layoutSubviews()

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    ///fix bug in xcode UITableViewAutomaticDimension
    tableView.layoutSubviews()
}