调整内容UITableviewcell的横向大小

时间:2009-08-31 18:28:50

标签: uitableview landscape

我正在iPhone SDK中开发一个应用程序,我希望在设备处于横向模式时调整tableviewcell的内容。

在我的tableviewcell中,我有一个同步图像和两个标签。在纵向模式下,它看起来非常漂亮,但是当我在横向上翻转设备时,我的tableview的内容不会调整大小。

有人可以帮忙吗?

此代码适用于ionterfaceOrientation,如果属于横向,我会将reloadData调用到我的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);
}

在此之前一切正常,但我的tableview不会调整内容大小。

这是我的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;
}

标签不响应调整大小,并且在桌面视图上有摆动。我在想的是重置我的tableview,但我不知道该怎么做。

4 个答案:

答案 0 :(得分:3)

感谢您的分享。这是一个很好的主意,有一个设置UITableViewCell的方法。但我发现uitableviewcell的内容可以只用这个代码行重新编写:

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

只有autoresizingMask行允许控件修改他们的Widht和Height。

答案 1 :(得分:1)

我遇到了与自定义UITableViewCell类似的问题,我最终下载异步图像(像你一样)并将其设置在Apple的UITableViewCell提供的imageView中(不是作为子视图添加的自定义imageView)。

对于需要调整大小的标签(文本长度超过纵向一行),我将文本设置为默认的textLabel,并自动调整大小。我还有一个第二个标签,其中包含一个日期(文本很短,不需要调整大小),ni将其作为子视图添加到单元格的内容视图中。

最初我做了你在上面的代码中做了什么..我设置我的uilabels并将它们添加为子视图但我发现方向更改警报没有从tableView传递给他们所以在景观中看起来不像我预期..

您可以在此处找到有关UITableViewCell的更多信息UITableViewCell

在我的自定义UITableView单元格中,我有一个为单元格设置数据的方法......就像这样:

    - (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:)];
}
创建单元格后,在cellForRowAtIndexPath中

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

并在此设置之后显示单元格将显示的信息:

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

希望这会对你有所帮助。

答案 2 :(得分:0)

您可以在shouldAutorotateToInterfaceOrientation方法上使用这一简单的行:

self.view.autoresizesSubviews = YES;

答案 3 :(得分:0)

如果您在IB中连接自定义单元格autoresizingMask = UIViewAutoresizingFlexibleWidth由于某种原因不起作用。

我在加载视图时调整自定义单元格的大小并禁用视图旋转。此代码适用于iPhone。我认为iPad需要+256,但从未测试过

- (void)viewDidLoad
  {
    [super viewDidLoad];

    if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
    CGRect newFrame = customCell.frame;
    newFrame.size.width = newFrame.size.width+160;
    customCell.frame = newFrame;
  }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}