相当于UIViewController的ContentInset?

时间:2015-10-19 11:17:23

标签: ios uiviewcontroller

我正在尝试实现一个函数,在我的TabBarController中UITabBar之上会有一个永久性横幅。为了避免破坏viewController.view中的内容,我想使用某种内容插入。 如果tabBarController的所有viewControllers都是tableViews或scrollViews,那么我可以更改它们的contentInset,但不是所有的都是。 我已经尝试将viewController.view.frame更改为更短的高度(为视图下方和tabBar上方的44px横幅腾出空间),但视图不会更新。我猜它并不像44px' void'在viewController本身(因为UIView下面没有任何东西)。

我想到了几种不同的方式:

  1. 以某种方式改变实际TabBar的高度/原点而不改变设计,在tabBar的顶部增加了44px的额外空间,这有望更新上面的' viewController的约束

  2. 以某种方式编辑viewController.view的约束,以在TabBar和视图底部之间留出空间。

  3. 以某种方式以编程方式更改BottomLayoutGuide

  4. 这些都有可能吗?我已经搜索过,没有任何运气..有没有其他方法可以对一般UIViewController进行此操作?

    为了澄清,我确实为TabBarController中的每个ViewControllers都有自己的类,但我想找到一种方法来实现这一点,而无需更改viewControllers的任何代码。 - >我想仅从UITabBarController进行此更改。 (例如。(伪)self.viewControllers.view.frame.size.height - = 44;(实际上不是代码,缩短)(不起作用))

2 个答案:

答案 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;