views:

1459

answers:

2

Hi i`m developing a app in iphone sdk and i want to resize the content of my tableviewcell when the device is in landscape mode.

In my tableviewcell i have an synchronous image and two labels, in portrait mode i looks awesome very nice, but when i turn the device in landscape the content of my tableview doesn`t resize.

There is someone can help with this?

This code is for ionterfaceOrientation and if this is in landscape i call the reloadData to my tableview.

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if (interfaceOrientation == UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {

    NSLog(@"LandsCape Mode");
    [mytabla reloadData];
    

    }else{ NSLog(@"Portrait Mode"); }

    return YES; // for supported orientations //return (interfaceOrientation == UIInterfaceOrientationPortrait); }

Until this everithing is O.K., but my tableview do not resize content.

This is the code init my tableview cellForRowAtIndexPath:(NSIndexPath *)indexPath

AsyncImageView *asyncImageView = nil; cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

 }

  CGRect frame;
  frame.origin.x = 5;
  frame.origin.y = 10;
  frame.size.width = 70;
  frame.size.height = 60;
  asyncImageView = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];
  asyncImageView.tag = ASYNC_IMAGE_TAG;
  cell.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  frame.origin.x = 52 + 10;
  frame.size.width = 200;

  NSString *urlSeccion = aBook.Titulo;
  urlSeccion = [urlSeccion stringByReplacingOccurrencesOfString:@"\n" withString:@""];

  NSString *SeccionSummary = aBook.Summary;
  SeccionSummary = [SeccionSummary stringByReplacingOccurrencesOfString:@"\n" withString:@""];

  [cell.contentView addSubview:asyncImageView];

  upLabelText = [[UILabel alloc] initWithFrame:CGRectMake(90, cell.frame.origin.y, cell.frame.origin.size, 50)];
  upLabelText.textColor = [UIColor blackColor];
  upLabelText.text = urlSeccion;
  [upLabelText setNumberOfLines:2];
  [upLabelText setLineBreakMode:UILineBreakModeWordWrap];
  upLabelText.font = [UIFont systemFontOfSize:13.0];  


  downLabelText = [[UILabel alloc] initWithFrame:CGRectMake(90, 45, cell.frame.origin.size, 50)];
  downLabelText.textColor = [UIColor blackColor];
  downLabelText.text = SeccionSummary;
  [downLabelText setNumberOfLines:5];
  [downLabelText setLineBreakMode:UILineBreakModeWordWrap];
  downLabelText.font = [UIFont systemFontOfSize:8.0];  



  [cell.contentView addSubview:downLabelText];
  [cell.contentView addSubview:upLabelText];
  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

  asyncImageView = (AsyncImageView *) [cell.contentView viewWithTag:ASYNC_IMAGE_TAG];



  NSString *urlSeccionImagen = aBook.ThumbnailURL;
  urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@" " withString:@""];
  urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  urlSeccionImagen = [urlSeccionImagen stringByReplacingOccurrencesOfString:@" " withString:@""];

  NSString *urlString = [NSString stringWithFormat:urlSeccionImagen,indexPath.row + 1];
  NSURL *url = [NSURL URLWithString:urlString];
  [asyncImageView loadImageFromURL:url];

return cell; }

the labels doesnt respond to the resize and there are swing over the tableview, What im thinking is to reset my tableview but i don`t know who to do it, please help me, this is freaking me out.

+1  A: 

Hello Jonathan, i had a similar problem with a custom UITableViewCell and i ended up downloading async the image(like you) and setting it in the imageView provided by Apple's UITableViewCell(not in a custom imageView added as a subview).

For the label that needed to be resized(the text was longer than one row in portrait) i set the text in the default textLabel and it was resized automatically. I also had a second label that contained a date(the text was short and didn't needed resizing),ni added it as a subView to the content view of the cell.

Initially i did what you did in the code above.. i setup my uilabels and added them as subviews but i discovered that the orientation changes alerts didn't pass to them from the tableView so in landscape didn't looked as i expected..

more about the UITableViewCell you can find here UITableViewCell

in my custom UITableView cell i had a method that set-up the data for the cell...something like this:

    - (void) setData:(Feed *) dict
{
    self.autoresizesSubviews = YES;
    self.imageView.image = [UIImage newImageFromResource:@"noFeedImg.png"];
    self.textLabel.highlightedTextColor = [UIColor whiteColor];
    [[self textLabel] setOpaque:NO];
    [[self textLabel] setBackgroundColor:[UIColor clearColor]];
    [[self textLabel] setText:[dict feedTitle]];
    [[self textLabel] setTextColor:[UIColor blackColor]];
    [[self textLabel] setNumberOfLines:3];
    [[self textLabel] setFont:[UIFont boldSystemFontOfSize:12]];

    [self addSubview:dateLabel];
    dateLabel.text = [dict publishDate];
    dateLabel.frame = CGRectMake(self.contentView.bounds.origin.x + 125, 100, 175, 14);
    self.URL = [dict feedURL];

    [imageLoader loadImageFromURL:[NSURL URLWithString:@"http://www.google.com"] withCallbackTarget:self withCallbackSelector:@selector(setupImage:)];
}

in the cellForRowAtIndexPath after creating the cell:

FeedTableViewCell *cell = [[[FeedTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

and after that setup the info that the cell will display:

[cell setData:[feedsList objectAtIndex:feedIndex]];

hope this will help you.

SorinA.
Thanks for this sharing. This is a great idea having a method to set-up the UITableViewCell.
Jonathan
+1  A: 

Thanks for this sharing. This is a great idea having a method to set-up the UITableViewCell. But I figured out that the content of a uitableviewcell can rezise with just this code line:

tituloLabelText.autoresizingMask = ( UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); tituloLabelText.text = @"A Large text resides here"; [tituloLabelText setNumberOfLines:2]; [tituloLabelText setLineBreakMode:UILineBreakModeWordWrap];

With just the line of autoresizingMask this allow to the controlls modify their Widht and Height.

Jonathan