gpt4 book ai didi

iphone - UIImageView 单元格 contentView 的 View 之一未与其父 View 一起扩展

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:43 25 4
gpt4 key购买 nike

我有一个 UITableView,其中每个单元格在其 contentView 中包含一个 UIView,我们称它为 V。V 也有 subview ,一个 UIImageView 和 UILabel.UIImage 只是一个白色的圆角矩形我希望我的单元格(连同 UIImageView)在被选中时展开和缩小。我向 didSelectRowAtIndexPath 和 heightForRowAtIndexPath 方法添加了一些代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSNumber * key = [NSNumber numberWithInt:indexPath.row];
UITableViewCell *cell = [cells objectAtIndex:indexPath.row];
UIView * v = [[[cell contentView] subviews] objectAtIndex:0];
UIImageView * image = [[v subviews] objectAtIndex:0];

_tappedIndex = [key intValue];
_expanded = [_tappedCells objectForKey:key] == nil;
NSLog(@"view's old params: %@", [GGStackPanel printFrameParams:v]); //prints out the frame params
NSLog(@"image's old params: %@", [GGStackPanel printFrameParams:image]);
if (_expanded)
{
[_tappedCells setObject:key forKey:key];
v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y, v.frame.size.width, v.frame.size.height*1.5);
image.frame = CGRectMake(image.frame.origin.x, image.frame.origin.y, image.frame.size.width, v.frame.size.height + 73);
}
else
{
[_tappedCells removeObjectForKey:key];
v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y, v.frame.size.width, v.frame.size.height/1.5 );
image.frame = CGRectMake(image.frame.origin.x, image.frame.origin.y, image.frame.size.width, v.frame.size.height - 113);
}
NSLog(@"view's new params: %@", [GGStackPanel printFrameParams:v]);
NSLog(@"image's new params: %@", [GGStackPanel printFrameParams:image]);

[tableView beginUpdates];
[tableView endUpdates];
}

- (CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *v = [_cells objectAtIndex:indexPath.row];
CGFloat height = v.frame.size.height;
if (indexPath.row == _tappedIndex)
{
if (_expanded)
{
height = v.frame.size.height * 1.5;
}

else
{
height = v.frame.size.height/1.5;
}
}
return height;
}

细胞框架和 V 正在扩展,我记录了它们的框架参数。但是 imageView 始终保持不变,即使您在每次选择单元格时更改其框架也是如此。它的框架在 didSelectRowAtIndexPath 方法中发生了变化,但是当您再次点击同一个单元格时,它说它的框架与上次相比没有变化。

如果我放置另一个 UIView 而不是 imageView,它会随着其父 View 和单元格展开和收缩。因此,我想出了一个非常奇怪的解决方案:切割圆角矩形,将狭窄的顶部和底部部分保留为 imageView。然后在中间放置一个空白的 UIView,颜色与矩形相同。现在我的“矩形”正在扩大,因为空白的 UIView 扩大了并且那两个 imageView 正在上下移动。我不喜欢这个解决方案,因为如果您将手机切换到横向模式,或者尝试从横向模式展开单元格然后返回纵向模式,UI 会变得一团糟。

有什么意见、建议吗?

最佳答案

如果您使用 initWithImage:,UIImage View 与其图像具有相同的大小。我假设您在 IB 中添加图像,所以我猜测 IB 使用该方法来填充 ImageView 。如果您无法在扩展后添加图像(使用 setImage 会导致图像填充 ImageView 的大小),那么我将只使用带圆角的 UIView。你不需要做切片,只需要使用一个圆角层。这就是我通过在单元格内放置一个圆角白色矩形来使单元格具有分组外观所做的工作。这是 subview 的初始化方法:

-(id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
self.backgroundColor = [UIColor whiteColor];
CALayer *bgLayer = self.layer;
[bgLayer setMasksToBounds:YES];
[bgLayer setCornerRadius:8];
}
return self;
}

如果这样做,请务必导入 QuartzCore 框架。

关于iphone - UIImageView 单元格 contentView 的 View 之一未与其父 View 一起扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126065/

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