我正在尝试实现一个函数,在我的TabBarController中UITabBar
之上会有一个永久性横幅。为了避免破坏viewController.view
中的内容,我想使用某种内容插入。
如果tabBarController的所有viewControllers都是tableViews或scrollViews,那么我可以更改它们的contentInset,但不是所有的都是。
我已经尝试将viewController.view.frame更改为更短的高度(为视图下方和tabBar上方的44px横幅腾出空间),但视图不会更新。我猜它并不像44px' void'在viewController本身(因为UIView下面没有任何东西)。
我想到了几种不同的方式:
以某种方式改变实际TabBar
的高度/原点而不改变设计,在tabBar的顶部增加了44px的额外空间,这有望更新上面的' viewController的约束
以某种方式编辑viewController.view的约束,以在TabBar和视图底部之间留出空间。
以某种方式以编程方式更改BottomLayoutGuide
这些都有可能吗?我已经搜索过,没有任何运气..有没有其他方法可以对一般UIViewController
进行此操作?
为了澄清,我确实为TabBarController中的每个ViewControllers都有自己的类,但我想找到一种方法来实现这一点,而无需更改viewControllers的任何代码。 - >我想仅从UITabBarController进行此更改。 (例如。(伪)self.viewControllers.view.frame.size.height - = 44;(实际上不是代码,缩短)(不起作用))
答案 0 :(得分:1)
我建议你使用bounds
的{{1}}属性来做这个伎俩。我就是这样做的:
第1步:在UIView
上添加一个类别,通过传入点来更改视图控制器的视图:
<强> UIViewController.MyAddition.h 强>
UIViewController
<强> UIViewController.MyAddition.m 强>
#import <Foundation/Foundation.h>
@interface UIViewController (MyAddition)
- (void)moveViewDownBy:(CGFloat)iDownPoints;
@end
第2步:在#import "UIViewController+MyAddition.h"
@implementation UIViewController (MyAddition)
- (void)moveViewDownBy:(CGFloat)iDownPoints {
CGRect bounds = self.view.bounds;
bounds.origin.y -= iDownPoints;
bounds.size.height = -iDownPoints;
self.view.bounds = bounds;
}
@end
的{{1}}方法中调用此类别:
ViewController
答案 1 :(得分:0)
你不能改变viewController框架的高度。因为它的高度/宽度是只读的
所以,这个棘手的
CGRect frame = self.viewControllers.view.frame;
frame.size.height -=44;
self.viewControllers.view.frame = frame;