在 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 中添加子视图的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 带有布局指南的 UITabBar 上方的 UIView
UIViewController 在 UITabBar 中执行的操作并切换回原始视图