我的应用程序中有一个静态表视图。此表视图用于首选项。
表视图中的一个部分只有一个包含UISwitch
的单元格。当这个开关被激活时,我想显示下面的部分,当它不是时,我想隐藏下面的部分。所有部分(也应该隐藏/显示的部分)都是使用Interface Builder设置的。
当表视图是静态的时,有没有办法隐藏或显示此部分,因为静态表视图没有数据源?如果它更容易,我也同意使用相同的部分,但在开关打开或关闭时添加/隐藏此部分的行。
修改
我已经接近了如何做到这一点。
将节中单元格的高度和页脚的页眉高度设置为0,我可以几乎隐藏该节。我仍然在上面的部分和下面的部分之间有一些间距,我无法弄清楚如何摆脱。 有没有人知道这个额外的间距来自哪里?见下面的照片。
这是我用来几乎隐藏该部分的代码。
/* Will display cell */
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 2)
cell.hidden = YES;
else
cell.hidden = NO;
}
/* Height of cell */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 2)
return 0;
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
/* Height of section header */
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 2)
return 0;
return [super tableView:tableView heightForHeaderInSection:section];
}
/* Height of section footer */
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
if (section == 2)
return 0;
return [super tableView:tableView heightForFooterInSection:section];
}
这是表视图现在的样子。我还需要隐藏一些空间。额外的空间位于标有“Arbejde”和“Anden”的部分之间。
答案 0 :(得分:1)
我使用问题中的代码工作了。只需将高度设置为1.0f
而不是0
。似乎高度仅在其值大于零时才有效。
答案 1 :(得分:0)
答案 2 :(得分:0)
对于静态细胞我也找不到合适的答案。如果你想删除部分或扩展单元格,那么这就是我使用的代码。
在.m
中创建BOOL值@interface yourClassName (){
BOOL ddMenuButtonPressed;
}
@end
ddMenu表示drop down menu
。
接下来,我在viewDidLoad
方法中将bool值设置为false。
ddMenuButtonPressed = false;
然后我初始化ddButton(在故事板控件中+从你的按钮拖动或切换到.h文件并创建动作并将名称设置为ddMenuButton)并在我的.m文件中使用此方法。
- (IBAction)ddMenuShow:(UIButton *)sender
{
if (sender.tag == 0) {
sender.tag = 1;
ddMenuButtonPressed = true;
} else {
sender.tag = 0;
ddMenuButtonPressed = false;
}
//very important that you include these
//they update the view like a viewDidLoad statement without leaving the screen
//if you have any data entry points in your cell like a textfield it **will not** erase that data fortunately
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
最后我们添加以下方法:
// Handle expanding and minimising cell or section
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//if the section is 0 (and there is only one cell) and ddMenuButtonPressed hasn't been pressed
if (indexPath.section == 0 && ddMenuButtonPressed == false){
//return the height you have it set as in story board (or a number)
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
//if the section is 0 and the ddMenuButton has been pressed
if (indexPath.section == 0 && ddMenuButtonPressed == true){
//change the cell height to 380 or whatever size you want
return 380;
}
//otherwise leave cells as they are
else {
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
}
就是这样。没有花哨的编码,漂亮和干净(减去评论)和简单,你可以一遍又一遍地使用这个,你喜欢的部分。
答案 3 :(得分:0)
对于静态单元格,我只使用它:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = self.tableView(self.tableView, cellForRowAt: indexPath)
if cell.isHidden {
return 0
} else {
return cell.bounds.size.height
}
}