我有一个UITableView,里面是UIView和动态UITableViewCells。 UIView位于表格的顶部,单元格位于其下方。
我的问题是,当我按下某个按钮后放大UIView时,它会重叠下面的单元格。由于细胞是动态的,我不知道如何进入细胞并向下移动它们的原点。 此外,如果我有很多细胞,我真的不想一个接一个地移动每个细胞。
我试图查看UITableView是否为其单元格设置了某种偏移参数,但没有找到任何类型的偏移参数。
通过故事板,当我放大桌子内部的UIView时,单元格自动被推到它下面,但不幸的是,当我通过代码以编程方式放大UIView时(按下按钮后),单元格保留在原始位置,不要动。
以下是展示正在发生的事情的插图:
我的自动布局已关闭。
答案 0 :(得分:2)
听起来您希望自定义UIView
的行为类似于UITableViewCell
,方法是在细胞高度增加时上下移动细胞。就这样做。创建一个自定义UITableViewCell
,其高度可以动态更改并在顶部(或您想要的任何其他位置)呈现该单元格。
答案 1 :(得分:1)
你不应该以你正在做的方式将UIView放在UITableView中。我认为,有两种主要方法:
1)在UIView
上方添加UITableView
。你没有提到为什么它需要在里面。
UIView *view = [[UIView alloc] init];
UITableView *tableView = [[UITableView alloc] init];
view.translateAutoResizingMaskIntoConstraints = NO;
tableView.translateAutoResizingMaskIntoConstraints = NO;
[self.view addSubview:view];
[self.view addSubview:tableView];
NSDictionary *viewsDictionary = @{@"view" : view, @"tableView" : tableView};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]" options:kNilOptions metrics:nil viewDictionary:viewsDictionary];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view][tableView]|" options:NSLayoutFormatAlignAllLeading | NSLayoutFormatAlignAllTrailing metrics:nil viewDictionary:viewsDictionary];
2)假设UIView绝对需要在UITableView中,最好的方法是使用contentOffset。
CGSize innerViewSize = CGSizeMake(CGRectGetWidth(self.view.bounds), 200.0f);
UIView *innerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, -innerViewSize.height, innerViewSize.width, innerViewSize.height)];
UITableView *tableView = [[UITableView alloc] initWithStyle:UITableViewStylePlain frame:self.view.bounds];
tableView.contentOffset = CGPointMake(0.0f, innerViewSize.height);
然后,只要您需要增加内部视图的大小,就可以更改它的原点并增加contentOffset.y
。