iOS - 呈现控制器时 UITableView 位置重置

iOS - UITableView Position Resets When Controller is Presented

所以我有一个视图控制器,它的 UITableView 覆盖了控制器的下半部分。我在顶部 header 有一个按钮,允许用户最小化或最大化 UITableView。当按下按钮时,UITableView 位置的 y 分量被修改,因此 UITableView 看起来已经最小化到屏幕底部。当 UITableView 处于最小化状态时按下按钮,UIableView 的 y 位置将返回到其原始值。 UITableView 的最大化和最小化都进行了动画处理,以在 UITableView.

的打开和关闭状态之间提供平滑过渡

这一切都很好地工作,并提供了一种用户体验,允许用户利用 table 视图中显示的信息及其背后的视图控制器中显示的信息。当第二个控制器出现在顶部时,问题就来了。出于某种原因,当用户关闭第二个控制器时,table 视图总是 returns 到其初始位置,而不管它在第二个控制器出现时所处的位置。这会产生很多问题,因为初始视图控制器仍然认为 table 视图处于呈现时的位置。为什么是这样?当视图控制器显示在顶部然后关闭时,为什么组件的位置会重置?

以下是我如何将 UITableView 定义为 属性:

@property (nonatomic, strong) IBOutlet UITableView *reviewTable;

这是我 minimize/maximize 我的 table 观点:

- (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];
        }];
    }
}

如果需要任何其他信息来回答这个问题,请告诉我。

由于我无法发表评论,因此我必须将其添加为答案。

打开您的 storyboard->View Controller(Which has the table view)-> View 视图控制器。

Inside this view, if the tableView is first in the view hierarchy from the top, the table view cells shift downwards to the height of the navigation bar.

希望对您有所帮助!

原来 UITableView 返回到其原始位置的原因是因为有关自动布局的问题。当我在情节提要文件中禁用自动布局时,UITableView 运行正常。这在我的应用程序 UI 中引起了许多其他问题,因此我决定只为有问题的 UITableView 禁用自动布局。这行得通,这是我用来执行此操作的代码:

//This disables autolayout for myTableView
myTableView.translatesAutoresizingMaskIntoConstraints = YES;

如果我的解决方案有任何我忽略的问题,请随时发表评论。如果不是,我会接受这个答案,因为它似乎已经解决了我的问题。