3

所以我的 rootViewController 包含一个带有自定义 UICollectionViewCell 的 UICollectionView。我在单元格上有一个标签,标题不应该改变,我有一个多行标签组成单元格其余部分的主体。当我启动应用程序时,它会正确调用 sizeToFit 并且顶部对齐所有内容,因此它不会居中。我单击一个单元格并转到下一个视图,然后如果我单击后退按钮返回到 rootViewController,它会运行 viewWillAppear 方法并重新加载数据,但 sizeToFit 不起作用并且多行上的所有内容标签变得居中对齐。它仍然是多行,但如果只有几行,它位于标签的中心,看起来不太好。我怎样才能保持这个,所以它是一致的。我有一个左侧菜单,它将重新加载 rootViewController,它将再次正确定位标签,但是一旦我从 secondViewController 中点击后退按钮,它就不再对齐。有没有办法清除所有单元格并重新加载它们。我试过 [collectionView reloadData]; 在 viewWillAppear 中并且它不起作用,它当前在从 viewWillAppear 方法调用网络连接的 connectionDidFinish 结束时调用。任何帮助表示赞赏。它当前在从 viewWillAppear 方法调用网络连接的 connectionDidFinish 结束时调用。任何帮助表示赞赏。它当前在从 viewWillAppear 方法调用网络连接的 connectionDidFinish 结束时调用。任何帮助表示赞赏。

这是自定义 UICollectionViewCell 代码

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
    [contentLabel setNumberOfLines:0];
    [contentLabel sizeToFit];
}

根视图控制器

-(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:
(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"LocationListCell";
    LocationList *cell = [cv dequeueReusableCellWithReuseIdentifier:cellIdentifier 
                                                           forIndexPath:indexPath];

    [cell.titleBar setText:[value objectAtIndex:indexPath.row]];
    NSArray *tempObject = [[NSArray alloc] initWithArray:[self getData:[key   
                                           objectAtIndex:indexPath.row]]];

    NSMutableString *tempString = [[NSMutableString alloc] init];
    for (int i = 0; i < [tempObject count]; i++)
    {
        [tempString appendString:[tempObject objectAtIndex:i]];
        [tempString appendString:@"\r"];
    }
    //[cell.contentLabel sizeToFit];
    //[cell.contentLabel setNumberOfLines:0];
    [cell.contentLabel setText:tempString];
    return cell;
}
4

3 回答 3

1

将此动态UILable与此自定义方法一起使用...

.m只需在您的文件中添加此波纹管方法

-(float) calculateHeightOfTextFromWidth:(NSString*) text: (UIFont*)withFont: (float)width :(UILineBreakMode)lineBreakMode
{
[text retain];
[withFont retain];
CGSize suggestedSize = [text sizeWithFont:withFont constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:lineBreakMode];

[text release];
[withFont release];

return suggestedSize.height;
}

并像下面一样使用它..

   UILabel *yourLable = [[UILabel alloc]init];
    [yourLable setFrame:CGRectMake(110, 31, 200, 50)];        
    [yourLable setText:tempString];
    yourLable.lineBreakMode = UILineBreakModeWordWrap;
    yourLable.numberOfLines = 0;
    yourLable.font = [UIFont fontWithName:@"Helvetica" size:12];

    yourLable.frame = CGRectMake(yourLable.frame.origin.x, yourLable.frame.origin.y, 
                             200,[self calculateHeightOfTextFromWidth:yourLable.text :yourLable.font :200 :UILineBreakModeWordWrap]  ); 


    yourLable.textColor = [UIColor darkGrayColor];

     cell.contentLabel = yourLable;

希望这可以帮助你...

于 2012-12-20T05:05:13.073 回答
0

试试这些行:

contentLabel.textAlignment = UITextAlignmentLeft;
 contentLabel.lineBreakMode = UILineBreakModeWordWrap;
于 2012-12-20T03:48:33.737 回答
0

尝试这样并在 .h 文件中声明标签

contentLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 49, 202, 237)];
 [contentLabel setNumberOfLines:0];
    [contentLabel sizeToFit];
  [cell.contentLabel setText:tempString];
于 2012-12-20T04:24:09.323 回答