gpt4 book ai didi

ios - iOS7 中选定的 UITableViewCell 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 06:09:58 26 4
gpt4 key购买 nike

我正在将我的应用程序移植到 iOS 7,我的 tableView 出现了一些奇怪的行为。当我选择一个单元格时,分隔符无缘无故消失。不仅如此,所选状态的背景图像也向上移动了大约 1 个像素,即使它的框架没有指明这一点。我在 iOS 6 或更旧的操作系统上没有这些问题。

我按以下方式定义我的 TableView :

    statisticsTableView = [[UITableView alloc] initWithFrame:CGRectMake(170.0f, 0.0f, 150.0f, window.size.height) style:UITableViewStylePlain];
statisticsTableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]];
statisticsTableView.separatorColor = [UIColor darkGrayColor];
//statisticsTableView.separatorInset = UIEdgeInsetsZero; // <- Makes app crash in iOS6 or older
statisticsTableView.showsHorizontalScrollIndicator = NO;
statisticsTableView.delegate = self;
statisticsTableView.dataSource = self;

单元格被子分类,相关部分如下(常规和选定的背景图像大小完全相同,在 iOS6 或更早版本中显示正确,只有 iOS 7 选定的 BG 图像显示稍高) :

    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 70.0f)];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"cell_background_corp.png"]];
self.backgroundView = backgroundView;

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 70.0f)];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"cell_background_corp_selected.png"]];
self.selectedBackgroundView = backgroundView;

现在,我确实知道其他人已经问过这个问题(或至少是其中的一部分),但那里的答案都不适合我。为了进一步引用,我尝试了这些“解决方案”,但它们没有有效:

Putting this into my didSelectrowAtIndexPath made my cells deselect. 
But, I need my selected cell to stay selected, and besides
it looked really awkward with the blinking as swithces between states:

[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

另一个:

Putting this into the heightForRowAtIndexPath delegate method 
as a return value did absolutely nothing:

ceilf(rowHeight);

最后:

This was my attempt to fix the background image position bug. I modified
the way I added the selected background view in the subclassed tableView cell,
but it did not do squat:

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 70.0f)];
if (iOSVersion >= 7.0f)
{
backgroundView.frame = CGRectMake(0.0f, 1.0f, 150.0f, 70.0f);
}
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"cell_background_corp_selected.png"]];
self.selectedBackgroundView = backgroundView;

最佳答案

我遇到了类似的问题,为我解决的问题是像这样覆盖 UITableViewCell 子类中的 layoutSubviews:

- (void)layoutSubviews
{
[super layoutSubviews];
self.selectedBackgroundView.frame = self.backgroundView.frame;
}

重要的是让[super layoutSubviews]先调用。

顺便说一句,我认为默认行为是在 iOS7 中设计的。如果您查看 Apple Mail 应用程序,您会发现在选择单元格时分隔线也会消失,并且事件背景绘制在分隔线曾经所在的位置。

关于ios - iOS7 中选定的 UITableViewCell 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343395/

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