objective-c - 两个相同选项卡 View 中的 UITableView 表现不同

标签 objective-c xcode uitableview debugging uisearchbar

我创建了一个简单的项目来演示这种奇怪的行为。我在界面生成器中创建了所有这些,而没有触及代码,以便您轻松重现。 StoryBoard


起始页嵌入在只有一个按钮的导航 Controller 中,单击它时,屏幕将定向到选项卡 View (顶部有导航栏)。
运行程序时发生了 2 件奇怪的事情。

1) 选项卡 item2 的表格 View 位于导航栏下方,因为 item1 的显示正确。
correctincorrect
正如你所看到的,虽然两个表格 View 被放置在完全相同的位置,但是当程序运行时,第二个甚至因为不正确的对齐而隐藏了搜索栏。


2) 当点击选项卡item1中的搜索栏时,默认行为不隐藏导航栏(导航栏隐藏,搜索栏显示)。
由于导航栏是半透明的,我可以在导航栏下方看到“取消”按钮。(任何眼力好的人都可以看到屏幕截图右上角的蓝色调)。这意味着搜索栏会转到正确的位置,但导航栏不会消失。
incorrct again
另外,请注意,当搜索栏处于事件状态时,表格 View 不会随着搜索栏向上移动(同样,默认行为)。

PS:我正在使用 XCode 6。我还尝试向 tableviewcontrollers 添加约束,但没有骰子。
对此有什么想法吗?提前致谢。

最佳答案

正如 logixologist 所建议的,您可以为每个选项卡放置一个导航 Controller 作为选项卡的第一个 Controller 。如果您不想这样做,可以在第二项 View Controller 的 viewDidLoad 中添加以下代码。

CGFloat shiftDist = CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([UIApplication sharedApplication].statusBarFrame);
self.tableView.contentInset = UIEdgeInsetsMake(shiftDist,0, 0, 0.0f);
self.tableView.contentOffset = CGPointMake(0, -shiftDist);

之后,旋转出现问题。您会注意到,如果您旋转到横向,搜索栏不会固定在导航栏下方。以下是修复方法。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator NS_AVAILABLE_IOS(8_0);{

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    CGFloat heightBeforeRotation = CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([UIApplication sharedApplication].statusBarFrame);
    CGFloat offsetY = self.tableView.contentOffset.y;

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {

     } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {
         CGFloat heightAfterRotation = CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([UIApplication sharedApplication].statusBarFrame);
         self.tableView.contentInset = UIEdgeInsetsMake(heightAfterRotation,0, 0, 0.0f);
         self.tableView.contentOffset = CGPointMake(0, heightBeforeRotation + offsetY - heightAfterRotation);
     }];
}

关于objective-c - 两个相同选项卡 View 中的 UITableView 表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26669901/

相关文章:

ios - 使用长按手势重新排列表格 View 中的单元格?

objective-c - Objective-C 中的 SPM Bundle.module 等价物是什么

ios - 如何让 SceneKit 不在整个屏幕上

iphone - 处理 block 、完成处理程序、dispatch_async 与 dispatch_sync

ios - 升级到 Xcode 5.1 后 Xcode Bot 失败

swift - AVPlayerViewController 不播放视频?

iphone - 查看特定文件夹中的照片

objective-c - NSURLConnection 后查看 Controller Segue 延迟

ios - 如何将 Cordova 插件添加到带有嵌入式 Cordova WebView 的 Xcode 项目中?

ios - UITableView 头部 View 动画