在 UITabBar 中添加子视图

Posted

技术标签:

【中文标题】在 UITabBar 中添加子视图【英文标题】:Add subview in UITabBar 【发布时间】:2017-03-02 10:52:04 【问题描述】:

我想通过继承它来自定义 UITabBar 我无法获得 UITabBar 框架这是我的代码

在 home_tabbar.h 中

#import <UIKit/UIKit.h>
@interface home_tabbar : UITabBar
-(void) changeFrame;
@end

在 home_tabbar.m 中

#import "home_tabbar.h"
@implementation home_tabbar
- (void)viewDidAppear:(BOOL)animated 
   [self changeFrame];

- (void)changeFrame

   CGRect frame = self.viewForLastBaselineLayout.frame;
   NSLog(@"Frame x= %f y=%f width=%f height=%f",frame.origin.x,frame.origin.y,frame.size.width,frame.size.height);

@end

【问题讨论】:

尝试使用 self.frame 而不是 self.viewForLastBaselineLayout.frame。 @AshutoshDave self.frame 未启用它会引发错误 【参考方案1】:

你可以这样做……

子类UITabBarController,并为要添加的视图添加一个属性,在这种情况下是一个按钮……

@property (strong, nonatomic) IBOutlet UIButton *videoButton;

viewDidLoad中配置...

- (void)viewDidLoad

    [super viewDidLoad];

    self.videoButton.layer.cornerRadius = 4.0;
    self.videoButton.backgroundColor = [UIColor yellowColor];
    self.videoButton.clipsToBounds = YES;
    [self.tabBar addSubview: self.videoButton];
    

然后在viewDidLayoutSubviews

- (void) viewDidLayoutSubviews

    [super viewDidLayoutSubviews];

    // Only need to do this once if the orientation is fixed
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
        self.videoButton.center = (CGPoint)CGRectGetMidX(self.tabBar.bounds), CGRectGetMidY(self.tabBar.bounds);
    );

    // system moves subviews behind tab bar buttons, this fixes
    [self.tabBar bringSubviewToFront: self.videoButton];

【讨论】:

【参考方案2】:

我创建了一个类来自定义 UITabBar。就我而言,我必须添加背景图像并更新高度。 这是我的代码:

class DDTabBar: UITabBar 
    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)

        let backgroundImage = UIImageView(image: UIImage(named: "TabBar_Background"))
        backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
        var tabFrame = self.bounds
        tabFrame.size.height = 75
        backgroundImage.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        tabFrame.origin.y = self.bounds.size.height - 75
        backgroundImage.frame = tabFrame

        self.insertSubview(backgroundImage, at: 0)
    

【讨论】:

以上是关于在 UITabBar 中添加子视图的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 去除黑色背景

iOS - 带有布局指南的 UITabBar 上方的 UIView

UIViewController 在 UITabBar 中执行的操作并切换回原始视图

UITabBar 外观问题 + NSThreads

点击 UITabBar 时未调用子视图控制器的 viewDidDisappear

在视图已经可见时更改 uitabbar 图标