Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 7自定义表格视图位于选项卡栏下_Ios_Objective C_Uiview_Ios7_Tableview - Fatal编程技术网

iOS 7自定义表格视图位于选项卡栏下

iOS 7自定义表格视图位于选项卡栏下,ios,objective-c,uiview,ios7,tableview,Ios,Objective C,Uiview,Ios7,Tableview,我正在尝试将我的应用程序移植到iOS7,但我的自定义TableViewController正在显示选项卡栏下的最后一行(单元格):( 我一直在寻找它,但我没有找到任何解决办法。有人能帮我吗 错误显示在屏幕截图中(仅显示上一个产品的一部分,因为我将拖动到up以在选项卡栏下显示隐藏的产品): 谢谢。在iOS 7中,viewController使用全高。引入了一个属性作为 self.automaticallyAdjustsScrollViewInsets = NO; 将其设置为“否”。然后检查,

我正在尝试将我的应用程序移植到
iOS7
,但我的自定义
TableViewController
正在显示
选项卡栏下的最后一行(单元格):(

我一直在寻找它,但我没有找到任何解决办法。有人能帮我吗

错误显示在屏幕截图中(仅显示上一个产品的一部分,因为我将拖动到up以在选项卡栏下显示隐藏的产品):


谢谢。

在iOS 7中,viewController使用全高。引入了一个属性作为

self.automaticallyAdjustsScrollViewInsets = NO;
将其设置为“否”。然后检查,如果未在其后面设置UIEdgeInset,则设置UIEdgeInset

UIEdgeInsetsMake(top, left, bottom, right)
看这里

编辑:也可以尝试此操作

self.edgesForExtendedLayout = UIRectEdgeNone;

使用以下方法掩盖了问题:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 112, 0);
}
但这并不能解决问题,因为在每个iPhone和每个应用程序tableview上,我的底部都有不同的空间

所以这是一个糟糕的解决方案


我不知道如何解决它。

UINavigationController
UITabBarController
都有一个透明标志,可以通过编程或在情节提要中设置

UINavigationController
还有两个标志,用于控制内容是否扩展到顶部或底部栏下。同样,您可以通过编程或在情节提要中设置它们。这将应用于所有子视图

每个
UIViewController
都可以在代码中设置自己的首选项。该属性称为
edgesForExtendedLayout
,您可以设置所有组合

使用这些属性将允许AutoLayout和Springs'n'Struts以您希望的方式调整视图,而不考虑设备


UIViewController
中还有很多新属性需要查看。

我现在解决了问题,将我的BaseTableViewController更改为从UIViewController继承到UITableViewController

但在UIViewController中使用TableView并不能解决以下问题:(


谢谢。

我遇到了同样的问题,并用情节提要解决了它。 在选项卡栏控制器,转到属性检查器,模拟度量,并将底部栏设置为不透明选项卡栏。就是这样! 有关说明,请参见下图。


Saudações!(问候!)

UIViewController有两个新属性可以帮助您:
topLayoutGuide
bottomLayoutGuide
。它们返回您需要避免的父视图控制器控件的高度。在这种情况下,
bottomLayoutGuide
将返回选项卡栏的偏移量


您的自定义视图控制器可能正在重写一个方法,而没有调用
super
的实现,而这将为您完成。我猜您正在安装自动布局约束或手动设置视图框架以填充视图。您只需包含
[bottomLayoutGuide length]中的值即可
到布局计算中。如果您支持旋转,您应该在
WillAnimateRotationInterfaceOrientation:duration:
中更新该值,这可能不是一个正确的答案,也是出于这个原因,我发布了这个答案,以便您可以告诉我这个答案是否可能是一个可行的解决方案

在我的例子中,我喜欢半透明效果,因此我在表中添加了一个页脚,并修改了滚动指示器

- (void)viewDidLoad
{
    // Do any additional setup after loading the view.
    [super viewDidLoad];
    UIView *footer = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.agendaItemsTable.frame.size.width, self.tabBarController.tabBar.frame.size.height)];
    self.agendaItemsTable.tableFooterView = footer;
    self.agendaItemsTable.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, self.tabBarController.tabBar.frame.size.height, 0);

}

你觉得怎么样?

我在另一篇由dariaa回答的帖子上找到了你问题的答案,这里:

这对我很有效

请不要相信我,因为我不是最初解决这个问题的人

在自定义TableViewController中,在[super viewDidLoad]下添加以下两行:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.edgesForExtendedLayout = UIRectEdgeAll;
    self.tableView.contentInset = UIEdgeInsetsMake(0., 0., CGRectGetHeight(self.tabBarController.tabBar.frame), 0); 
} 

我也遇到了同样的问题,但投赞成票的答案并没有解决问题。请看一个类似的问题

我通过手动将表视图控制器的
viewwilldisease:
method中的表视图框架设置为屏幕高度(状态栏高度+导航栏高度+选项卡栏高度)解决了这个问题


如果有人找到了更好的解决方案,请与大家分享!

对于像xarly这样想要半透明效果的人,以及对于自动布局解决方案(不设置框架),请参阅我在这里的回答
viewDidLoad
中的<2行,就这样

self.edgesForExtendedLayout = UIRectEdgeAll;
self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f);

这个问题的根本原因是,
自动调整滚动视图insets
仅对VC视图层次结构中的第一个滚动视图有效。苹果没有对此进行记录,但这是VC检测需要修改的滚动视图的唯一方法,除非您使用的是UITableViewController

因此,为了在不手动调整插图的情况下解决问题,请执行以下操作:

  • 确保选中“调整滚动视图插入”
  • 确保tableView是视图层次结构中的第一个子视图。 (将其向上移动到所有其他元素之上)
  • 请尝试以下操作:

     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    
     self.edgesForExtendedLayout = UIRectEdgeBottom;
    

    我也遇到了同样的问题。解决方法之一是使工具栏不半透明。以下是如何做到这一点:

    • 首先从文档查看器中选择工具栏
    • 然后取消选中半透明
    希望这有帮助


    谢谢。

    我的朋友们,我无法告诉你们我是多么的挣扎。没有一个故事板的重新配置对我没有任何帮助。这个问题与最初的帖子完全一样,我已经通过以下方式解决了它:

    适用于swift 3

    self.edgesForExtendedLayout = []
    
    对于目标-c

    self.edgesForExtendedLayout = NO;
    

    我在集合视图中也遇到了类似的问题。更改集合视图框架和下面的内容插入为我修复了它

        guard let cv = collectionView,
            let tabBar = tabBarController?.tabBar else { return }
    
        // Resize collection view for tab bar
        let adjustedFrame = CGRect(origin: cv.frame.origin,
                                   size: CGSize(width: cv.frame.width, height: cv.frame.height - tabBar.frame.height))
        cv.frame = adjustedFrame
    
        // Adjust content inset for tab bar
        let adjustedContentInsets = UIEdgeInsetsMake(0, 0, tabBar.frame.height, 0)
        cv.contentInset = adjustedContentInsets
        cv.scrollIndicatorInsets = adjustedContentInsets
    

    祝你好运!

    我把它放进去了(如果你看到有注释的代码,已经测试过了)。但是没有解决它:(谢谢,这解决了我的选项卡栏的问题。您在这里使用的ViewWillDisplay对于初学者来说是错误的。这是一个常见错误。这应该在viewWillLoad中进行。ViewWillDisplay在每次视图出现时都会触发!您不希望该方法中的视图设置代码在每次视图出现时都触发。只有动态代码才会更改。)
        guard let cv = collectionView,
            let tabBar = tabBarController?.tabBar else { return }
    
        // Resize collection view for tab bar
        let adjustedFrame = CGRect(origin: cv.frame.origin,
                                   size: CGSize(width: cv.frame.width, height: cv.frame.height - tabBar.frame.height))
        cv.frame = adjustedFrame
    
        // Adjust content inset for tab bar
        let adjustedContentInsets = UIEdgeInsetsMake(0, 0, tabBar.frame.height, 0)
        cv.contentInset = adjustedContentInsets
        cv.scrollIndicatorInsets = adjustedContentInsets