是否可以调整 UITableViewCell 的宽度?

发布于 2024-07-25 06:07:50 字数 236 浏览 5 评论 0原文

我想知道是否可以调整 UITableViewCell 的宽度。 我想在其左侧放置一个图像(如地址簿中的联系人视图)。 我在此处找到了一个帖子这正是我想要实现的目标的图片。 我还想确认一下这篇文章的答案。

I would like to know if it is possible to adjust the width of a UITableViewCell.
I would like to put an image to the left of it (like the Contact view in Address Book).
I found a post here that provides a picture of exactly what I am trying to accomplish. I would also like to confirm the answers to this post.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烏雲後面有陽光 2024-08-01 06:07:51

IMO 不允许您更改 UITableViewCell 的宽度,但幸运的是您不需要这样做。 Apple 提供了四种默认样式,它们能够在单元格的左边框处显示一张图像(如果您想将其放置在其他位置,则必须创建自定义布局)。

UITableViewCellStyle 的四种样式是:

  • UITableViewCellStyleDefault
  • UITableViewCellStyleSubtitle
  • UITableViewCellStyleValue1
  • UITableViewCellStyleValue2

要将图像嵌入到 UITableViewCell 中,您应该阅读 Apple 开发人员连接网络上的 TableView 编程指南: 以预定义样式使用单元格对象

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    NSDictionary *item = (NSDictionary *)[self.content objectAtIndex:indexPath.row];
    cell.textLabel.text = [item objectForKey:@"mainTitleKey"];
    cell.detailTextLabel.text = [item objectForKey:@"secondaryTitleKey"];
    NSString *path = [[NSBundle mainBundle] pathForResource:[item objectForKey:@"imageKey"] ofType:@"png"];
    UIImage *theImage = [UIImage imageWithContentsOfFile:path];
    cell.imageView.image = theImage;
    return cell;
}

IMO you aren't allowed to change the width of a UITableViewCell, but fortunately you don't need to. Apple supplies four default styles which are able to show one image at the left border of the cell (if you want to place it elsewhere you have to create a custom layout).

The four styles of UITableViewCellStyle are:

  • UITableViewCellStyleDefault
  • UITableViewCellStyleSubtitle
  • UITableViewCellStyleValue1
  • UITableViewCellStyleValue2

To embed an image into a UITableViewCell you should read the TableView Programming Guide at Apples Developer Connection network: Using Cell Objects in Predefined Styles

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    NSDictionary *item = (NSDictionary *)[self.content objectAtIndex:indexPath.row];
    cell.textLabel.text = [item objectForKey:@"mainTitleKey"];
    cell.detailTextLabel.text = [item objectForKey:@"secondaryTitleKey"];
    NSString *path = [[NSBundle mainBundle] pathForResource:[item objectForKey:@"imageKey"] ofType:@"png"];
    UIImage *theImage = [UIImage imageWithContentsOfFile:path];
    cell.imageView.image = theImage;
    return cell;
}
夜光 2024-08-01 06:07:51

您不需要修改单元格的宽度。 您真正需要的是使单元格看起来具有不同的宽度(例如,通过修改其可见子视图的宽度)。

不幸的是,您的链接不起作用,所以我无法更具体。

您还可以尝试查看 UITableViewDelegate 协议中的 tableView:indentationLevelForRowAtIndexPath: 方法。

You don't need to modify the width of the cell. What you really need is to make the cell look like it has a different width (e.g. by modifying width of its visible subview).

Unfortunately your link does not work so I cannot be more specific.

You can also try looking at tableView:indentationLevelForRowAtIndexPath: method in UITableViewDelegate protocol.

对岸观火 2024-08-01 06:07:50

OS3.0 在 API 中有一些样式选项可以满足您的需求。

或者,您可以在 Interface Builder 中创建一个完全自定义的表视图单元格,例如在我的一个应用程序中,我在 cellForRowAtIndexPath 中执行此操作:

PlaceViewCell *cell = (PlaceViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [self createNewPlaceCellFromNib];
}

这是从 NIB 中挖掘它的方法

- (PlaceViewCell*) createNewPlaceCellFromNib {
    NSArray* nibContents = [[NSBundle mainBundle]
                            loadNibNamed:@"PlaceCell" owner:self options:nil];
    NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
    PlaceViewCell* placeCell = nil;
    NSObject* nibItem = nil;
    while ( (nibItem = [nibEnumerator nextObject]) != nil) {
        if ( [nibItem isKindOfClass: [PlaceViewCell class]]) {
            placeCell = (PlaceViewCell*) nibItem;
            if ([placeCell.reuseIdentifier isEqualToString: @"Place" ]) {
                //NSLog(@"PlaceCell - we have a winner!");
                break; // we have a winner
            } else {
                placeCell = nil;
                NSLog(@"PlaceCell is nil!");
            }
        }
    }
    return placeCell;
}

然后您可以直接在中创建 UITableViewCell 子类界面生成器。

OS3.0 has some style options in the API that may do what you want.

Or, you can create a completely custom table view cell within Interface Builder, for example in one of my apps I do this in my cellForRowAtIndexPath:

PlaceViewCell *cell = (PlaceViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [self createNewPlaceCellFromNib];
}

And this is the method to dig it out from the NIB

- (PlaceViewCell*) createNewPlaceCellFromNib {
    NSArray* nibContents = [[NSBundle mainBundle]
                            loadNibNamed:@"PlaceCell" owner:self options:nil];
    NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
    PlaceViewCell* placeCell = nil;
    NSObject* nibItem = nil;
    while ( (nibItem = [nibEnumerator nextObject]) != nil) {
        if ( [nibItem isKindOfClass: [PlaceViewCell class]]) {
            placeCell = (PlaceViewCell*) nibItem;
            if ([placeCell.reuseIdentifier isEqualToString: @"Place" ]) {
                //NSLog(@"PlaceCell - we have a winner!");
                break; // we have a winner
            } else {
                placeCell = nil;
                NSLog(@"PlaceCell is nil!");
            }
        }
    }
    return placeCell;
}

Then you can create the UITableViewCell subclass directly in Interface Builder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文