所以我有一个视图控制器,其UITableView
覆盖了控制器的下半部分。我在顶部标题中有一个按钮,允许用户最小化或最大化UITableView
。按下按钮时,UITableView
位置的y分量将被修改,以便UITableView
似乎已最小化到屏幕底部。当UITableView
处于最小化状态时按下按钮,UIableView
的y位置将返回其原始值。 UITableView
的最大化和最小化都是动画的,以便在UITableView
的打开和关闭状态之间提供平滑过渡。
这一切都非常好用,并提供用户体验,允许用户利用表格视图中显示的信息和其后面的视图控制器中显示的信息。第二个控制器出现在顶部时出现问题。出于某种原因,当用户解除第二个控制器时,无论第二个控制器出现时的位置如何,表格视图始终返回其初始位置。这会产生许多问题,因为初始视图控制器仍然认为表视图处于演示时的位置。为什么是这样?当视图控制器显示在顶部然后被解除时,为什么组件的位置会重置?
以下是我将UITableView
定义为属性的方法:
@property (nonatomic, strong) IBOutlet UITableView *reviewTable;
以下是我最小化/最大化表格视图的方法:
- (IBAction)btnExpandCompress:(id)sender
{
UIImage *downImage = [UIImage imageNamed:@"arrowDown.png"];
UIImage *upImage = [UIImage imageNamed:@"arrowUp.png"];
UIButton *btnExpandCompress = (UIButton *)sender;
[btnExpandCompress setEnabled:NO];
//global flag to tell if the table view is maximized or minimized
if (showingReviews)
{
[UIView animateWithDuration:0.7 animations:^{
CGRect frame = reviewTable.frame;
frame.origin.y += reviewTable.frame.size.height - 30;
reviewTable.frame = frame;
} completion:^(BOOL finished) {
showingReviews = NO;
[btnExpandCompress setEnabled:YES];
[btnExpandCompress setBackgroundImage:upImage forState:UIControlStateNormal];
}];
}
else
{
[UIView animateWithDuration:0.7 animations:^{
CGRect frame = reviewTable.frame;
frame.origin.y -= reviewTable.frame.size.height - 30;
reviewTable.frame = frame;
} completion:^(BOOL finished) {
showingReviews = YES;
[btnExpandCompress setEnabled:YES];
[btnExpandCompress setBackgroundImage:downImage forState:UIControlStateNormal];
}];
}
}
如果有任何其他信息需要回答这个问题,请告诉我。
答案 0 :(得分:0)
由于我无法发表评论,我将不得不将其作为答案添加。
打开View控制器的 storyboard->View Controller(Which has the table view)-> View
。
在此视图中,如果tableView是视图层次结构中的第一个 在顶部,表格视图单元格向下移动到高度 导航栏。
希望这有帮助!
答案 1 :(得分:0)
事实证明,UITableView返回其原始位置的原因是因为有关自动布局的问题。当我在storyboard文件中禁用自动布局时,UITableView表现正常。这在我的应用程序的UI中引起了许多其他问题,因此我决定仅针对有问题的UITableView禁用自动布局。这很有效,这是我用来做的代码:
//This disables autolayout for myTableView
myTableView.translatesAutoresizingMaskIntoConstraints = YES;
如果我的解决方案存在任何我忽略的问题,请随时发表评论。如果不是,我会接受这个答案,因为它似乎解决了我的问题。