【问题标题】:UITableView as ScrollView Between Navigation and Tab BarsUITableView 作为导航和标签栏之间的滚动视图
【发布时间】:2015-12-08 07:17:29
【问题描述】:

我在导航栏和选项卡栏之间放置了一个表格视图,并且只想为表格视图部分实现滚动(换句话说,在我的 iOS 模拟器中,我希望这两个栏始终可见,我应该能够在它们之间滚动我的表格视图)。

已经尝试过来自 SO 帖子的各种建议,恐怕还是会出错。你能告诉我如何解决这个问题 - 过去 1 天我一直在努力解决这个问题!

在表格视图控制器的 viewDidLoad 中,我使用以下代码。早些时候,我也尝试过单独初始化一个滚动视图,但知道表格视图是滚动视图的子类,所以放弃了那个路径......

- (void)viewDidLoad
{
    [super viewDidLoad];

    // To remove extra separators from the table view to prevent blank rows from showing.
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

    // ***** Scroll view implementation *****
    [[self tableView] setFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - self.navigationController.navigationBar.frame.size.height - self.tabBarController.tabBar.frame.size.height)];
    [[self tableView] setContentSize:CGSizeMake(self.view.frame.size.width, 2000)];

    [self setEdgesForExtendedLayout:UIRectEdgeNone];
    self.automaticallyAdjustsScrollViewInsets = YES;
}

事实上,为了进一步测试这一点,我在一个单独的选项卡(在这个 tabbarcontroller 应用程序中)创建了一个滚动视图,到目前为止我只有一个导航栏和一个选项卡栏(没有表格视图)。它的 viewDidLoad 看起来像这样 - 不知何故,那里也没有运气......滚动条从屏幕顶部(而不是从导航栏底部)开始,一直到屏幕底部(而不是直到标签栏的顶部)。很明显我在这里做一些概念上的错误......如果你能帮忙,请感谢!此处输入的数字是实验性的,用于测试这一点,但我确保内容大小大于滚动视图框架...

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 300)];

    [scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 1500)];
    [self.view addSubview:scrollView];

    [self setEdgesForExtendedLayout:UIRectEdgeNone];
    self.automaticallyAdjustsScrollViewInsets = NO;
    [scrollView setScrollEnabled:YES];
}

最后,当我在模拟器中调试我的应用程序时,奇怪的是对于表格视图选项卡,滚动条确实会暂时从导航栏下方开始出现。但是一旦我触摸触控板进行滚动,它就会消失,并且会出现一个更突出的滚动条,并从屏幕顶部开始到屏幕底部,正如我上面最初提到的那样!

【问题讨论】:

  • 在表格视图控制器的 IB 属性检查器中,取消选择顶栏和底栏下的选择,以便表格介于两者之间。注释掉你的其他代码。
  • 谢谢@RoryMcKinnel ...抱歉,但您知道我如何更改模拟指标,因为我没有使用情节提要,而是通过代码开发表格视图控制器...再次感谢因为我似乎无法找到如何通过代码更改 IB 属性!
  • 我认为你有设置边缘的正确代码。那就是[set setEdgesForExtendedLayout:UIRectEdgeNone]。如果您使用的是 UITableViewController,我认为这就是您所需要的,并且没有任何框架和内容大小设置,因为它应该由表格视图在布局其单元格时处理。
  • 好的,谢谢。不知何故它仍然不起作用 - 相当眼花缭乱 - 将继续尝试......

标签: ios uitableview uiscrollview uinavigationcontroller uitabbarcontroller


【解决方案1】:

我想我在自己的方式中发现了潜在的错误。不仅仅是一个实现错误,我错过了一个非常基本的问题......

总之,iOS 模拟器通常总是比电脑屏幕具有更高的分辨率/像素数,无论如何,除非手动调整大小,否则模拟器总是会比电脑屏幕大。所以滚动条通常会一直存在。 This SO 帖子帮助我理解了它。

另一方面,UIScrollView 已经在我的表格视图中自动实现,因为 UITableView 是 UIScrollView 的子类——我不需要做任何事情。我正在用“轻”双触摸滚动模拟器,由于上述问题,这将我带到了滚动条。如果我“硬点击”然后滚动,那么瞧!所需的 UIScrollView 确实按预期正常工作!这可能是误导我在问题中提到这些陈述的原因......!


最后,当我在模拟器中调试我的应用程序时,奇怪的是,对于表格视图选项卡,滚动条确实会暂时从导航栏下方开始出现。但是一旦我触摸触控板进行滚动,它就会消失,并且会出现一个更突出的滚动条,并从屏幕顶部开始到屏幕底部,正如我上面最初提到的那样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多