gpt4 book ai didi

ios - UIEdgeInsetsMake 在单元格上创建一个奇怪的带,我不知道如何修复它

转载 作者:技术小花猫 更新时间:2023-10-29 11:18:02 25 4
gpt4 key购买 nike

我正在尝试使用 UIEdgeInsetsMake 将单元格的背景设置为渐变。我尝试了多种方法来使其正常工作,但无论我使用什么,总会出现问题。

我只有两个静态单元格,我试图在 willDisplayCell: 中设置它们的 backgroundView。我有顶部、底部和中间单元格的单独图像,但由于我有两个单元格,我只需要顶部和底部。这些是那些图像:

置顶

enter image description here

底部

enter image description here

底部的顶部缺少一条线,因此它们之间没有 2pt 的线。我稍微调整了底部的高度以进行补偿(高 1pt)。这些图像是 44x44pt。

我将它们设置如下:

- (void)tableView:(UITableView *)tableView 
willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
UIImageView *topCellBackgroundImageView =
[[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"grouped-cell-bg-top"]
resizableImageWithCapInsets:UIEdgeInsetsMake(5.0, 5.0, 5.0, 5.0)]];
cell.backgroundView = topCellBackgroundImageView;
}
// If it's the last row
else if (indexPath.row == ([tableView numberOfRowsInSection:0] - 1)) {
UIImageView *bottomCellBackgroundImageView =
[[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"grouped-cell-bg-bottom"]
resizableImageWithCapInsets:UIEdgeInsetsMake(5.0, 5.0, 5.0, 5.0)]];
cell.backgroundView = bottomCellBackgroundImageView;
}

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

这不太好用。正如您在下图中看到的,在顶部的单元格中,单元格上有一个 1pt 的白色“带”,看起来非常难看。我不知道它为什么在那里。

enter image description here

所以我将 topCellBackgroundView 更改为具有 (5.0, 5.0, 0.0, 5.0) 的边缘插入,因为它仅在顶部呈圆形, bottom 属性不需要考虑在内(它是平坦的)。这非常有效!除非您选择单元格,否则底部单元格不再占据整个单元格。

enter image description here

我该怎么办?似乎无论我做什么,它都不起作用。我也试过 1.0 而不是 0.0,以及 -1.0 都无济于事。

最佳答案

好消息:您不会发疯。您的可伸缩图像代码可能是完美的。问题在于,具有分组样式的 UITableView 添加了额外的点到单元格的高度除了您在 heightForRowAtIndexPath:

中返回的值

因此,您的问题的解决方案是根据该部分中的总行数在 heightForRowAtIndexPath: 中返回调整后的单元格高度:

- (CGFloat)heightForRow:(NSIndexPath *)indexPath {
CGFloat standardHeight = 44.0f;
NSInteger numberOfRowsInSection = [self numberOfRowsInSection:indexPath.section];

if (numberOfRowsInSection == 1) {
standardHeight -= 2;
}
else if (indexPath.row == 0 || indexPath.row == numberOfRowsInSection-1) {
standardHeight -= 1;
}

return standardHeight;
}

这是一个示例图像,显示了 UITableView 如何执行此操作:

uitable-view-grouped-style-borked

据我所知,只有分组样式 TableView 会受到影响,即便如此,效果也会根据给定部分中的总行数发生变化:

  1. 一行 向单元格高度添加两点(视网膜上的默认高度为 92 像素)。
  2. 两行在第一行和最后一行的高度上加一个点(视网膜上默认每行 90 像素高)。
  3. 三行 在第一行和最后一行的高度上加一个点(默认情况下在 Retina 上每行 90 像素高)。中间行不受影响。

这太令人沮丧了,而且据我所知从未有过记录。 :-)

更新

上面的计算是针对使用默认分隔符样式 UITableViewCellSeparatorStyleSingleLineEtched 的分组样式 TableView 。以下是在其他情况下(即 UITableViewCellSeparatorStyleSingleLineUITableViewCellSeparatorStyleNone)要做的事情:

- (CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat rowHeight = 44.0f;
if (indexPath.row == 0) {
rowHeight -=1;
}
return rowHeight;
}

关于ios - UIEdgeInsetsMake 在单元格上创建一个奇怪的带,我不知道如何修复它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com