iOS 7自定义TableView在TabBar下
我试图移植我的应用程序到iOS7
,但我的自定义TableViewController
显示TabBar
下的最后一行(单元格):(
林寻找很多,但我没有find任何解决scheme。 谁能帮我?
我的自定义表视图类
错误显示在下面的截图中(仅显示上一个产品的一部分,因为我们在Tabbar下面显示隐藏的产品):
谢谢。
我有同样的问题,并使用故事板解决它。 在标签栏控制器,转到属性检查器,模拟度量标准,并将底部栏设置为不透明标签栏。 而已! 有关说明,请参见下图。
Saudações! (问候!)
我在另一个post上find了你的问题的答案,由dariaa回答,在这里:
标签栏覆盖iOS7中的TableView单元格
我为我工作很好。
请不要信任我,因为我不是解决它的原始人。
在你自定义的TableViewController中,在[super viewDidLoad]下面添加这两行:
- (void)viewDidLoad { [super viewDidLoad]; self.edgesForExtendedLayout = UIRectEdgeAll; self.tableView.contentInset = UIEdgeInsetsMake(0., 0., CGRectGetHeight(self.tabBarController.tabBar.frame), 0); }
viewDidLoad
2行,就是这样!
self.edgesForExtendedLayout = UIRectEdgeAll; self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f);
在iOS 7中,viewController使用全高。 有一个属性介绍为
self.automaticallyAdjustsScrollViewInsets = NO;
设置为no。 然后检查,或者设置UIEdgeInset,如果没有正确设置。
UIEdgeInsetsMake(top, left, bottom, right)
编辑 :也试试这个
self.edgesForExtendedLayout = UIRectEdgeNone;
这个问题的根本原因是automaticallyAdjustsScrollViewInsets
调用ScrollViewInsets只在 VC的视图层次结构中的第一个滚动视图上有效 。 它没有被Applelogging,但它是唯一的方式,VC会检测到需要修改的滚动视图,除非你使用的是UITableViewController。
因此,为了解决您的问题,而无需手动调整插页,请执行以下操作:
- 确保选中“调整滚动查看插图”。
- 确保tableView是视图层次结构中的第一个子视图。 (向上移动所有其他元素)
我的朋友们,我无法告诉你我有多挣扎。 没有一个故事板的重新configuration从来没有帮助过我。 这个问题是完全像在原来的post,我已经设法解决它使用:
为迅速3
self.edgesForExtendedLayout = []
对于Objective-C
self.edgesForExtendedLayout = NO;
UIViewController有两个新的属性可以帮助你: topLayoutGuide
和bottomLayoutGuide
。 他们返回您需要避免的父视图控制器的控件的高度。 在这种情况下, bottomLayoutGuide
将返回标签栏的偏移量。
你的自定义视图控制器可能是重写一个方法,而不是调用super
的实现,这将为你完成。 我猜你正在安装AutoLayout约束或手动设置视图的框架来填充视图。 您只需要将[bottomLayoutGuide length]
的值包含到布局计算中即可。 如果你支持旋转,你应该在willAnimateRotationToInterfaceOrientation:duration:
更新这个值willAnimateRotationToInterfaceOrientation:duration:
UINavigationController
和UITabBarController
都有一个透明度标志,可以以编程方式或在故事板中设置。
UINavigationController
还有两个标志,用于控制内容是否在顶部或底部栏下方延伸。 再次,您可以将它们设置为编程或在故事板中。 这将适用于所有子视图。
每个UIViewController
可以在代码中设置自己的首选项。 该属性被称为edgesForExtendedLayout
,你可以设置所有的组合。
使用这些属性将允许AutoLayout和Springs'n'Struts按照您希望的方式调整视图,而不考虑设备。
在UIViewController
中有很多新的属性,你会想看看。
尝试以下操作:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) self.edgesForExtendedLayout = UIRectEdgeBottom;
我有同样的问题。 解决方法是使ToolBar 不是半透明的。 以下是如何做到这一点:
- 首先从文档查看器中select工具栏, 就像这里一样
- 然后取消半透明 像这里
希望这可以帮助。
谢谢。
问题被掩盖使用:
-(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 112, 0); }
但它并没有解决,因为在每个iPhone和每个应用程序tableview我有一个不同的底部空间。
所以这是一个糟糕的解决scheme。
我不知道解决这个问题的方法。
我现在解决了我的问题,改变我的BaseTableViewController从UIViewControllerinheritance到UITableViewController。
但是使用UIViewController里面的TableView不能解决:(
谢谢。
也许不是一个正确的答案,也是因为这个原因,我发布这个答案,所以你可以告诉我,如果这个答案可能是一个可能的解决scheme。
就我而言,我喜欢半透明效果,所以我在表格中添加了一个页脚,并修改了scrollIndicators。
- (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); }
你怎么看?
我也遇到了同样的问题,最后的答案并没有解决。 查看我对类似问题的回答, Tab Bar覆盖iOS7中的TableView单元格 。
我通过手动将表视图控制器的viewWillAppear:
方法中的表视图框架设置为屏幕高度(状态栏高度+导航栏高度+选项卡栏高度)来解决问题。
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Adjust height of tableview (does not resize correctly in iOS 7) CGRect tableViewFrame = self.tableView.frame; tableViewFrame.size.height = [self heightForTableView]; self.tableView.frame = tableViewFrame; } - (CGFloat)heightForTableView { return CGRectGetHeight([[UIScreen mainScreen] bounds]) - (CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) + CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight(self.tabBarController.tabBar.frame)); }
如果有人find更好的解决scheme,请分享!
对于那些想要半透明效果的xarly ,以及Autolayout解决scheme(无需设置框架)的人,请参阅我的答案https://stackoverflow.com/a/26419986/1158074