我们如何创build一个更大的中心UITabBar项目

我想知道如何创build一个更大的中心UITabBar像下面的镜头? 真的很漂亮!!!!

在这里输入图像说明

我build议你看看下面的文章。 它解释了如何自定义提升主button的标签栏。

码:

UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height); [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted]; CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height; if (heightDifference < 0) button.center = self.tabBar.center; else { CGPoint center = self.tabBar.center; center.y = center.y - heightDifference/2.0; button.center = center; } [self.view addSubview:button]; 

指南 : https : //github.com/boctor/idev-recipes/tree/master/RaisedCenterTabBar

2017答案 – 只需Xcode

点击要制作的特定标签栏项目的视图控制器中的标签栏button,删除文本,只需将图像插入顶部设置为标签栏button的-25。 喜欢这个, 在这里输入图像说明

现在转到资产,select你在标签栏button设置的图像,设置属性渲染为原始图像(如果你有一个彩色的button,否则它会呈现为一种颜色)像这样, 在这里输入图像说明

现在,你会得到它像你想要的, 在这里输入图像说明

这里是移植的@卡卡西的答案Swift 3版本(和他们+1),我把它放在我自定义的UITabBarController子类:

 override func viewDidLoad() { if let newButtonImage = UIImage(named: "new__button") { self.addCenterButton(withImage: newButtonImage, highlightImage: newButtonImage) } } func handleTouchTabbarCenter(sender : UIButton) { if let count = self.tabBar.items?.count { let i = floor(Double(count / 2)) self.selectedViewController = self.viewControllers?[Int(i)] } } func addCenterButton(withImage buttonImage : UIImage, highlightImage: UIImage) { let paddingBottom : CGFloat = 10.0 let button = UIButton(type: .custom) button.autoresizingMask = [.flexibleRightMargin, .flexibleTopMargin, .flexibleLeftMargin, .flexibleBottomMargin] button.frame = CGRect(x: 0.0, y: 0.0, width: buttonImage.size.width / 2.0, height: buttonImage.size.height / 2.0) button.setBackgroundImage(buttonImage, for: .normal) button.setBackgroundImage(highlightImage, for: .highlighted) let rectBoundTabbar = self.tabBar.bounds let xx = rectBoundTabbar.midX let yy = rectBoundTabbar.midY - paddingBottom button.center = CGPoint(x: xx, y: yy) self.tabBar.addSubview(button) self.tabBar.bringSubview(toFront: button) button.addTarget(self, action: #selector(handleTouchTabbarCenter), for: .touchUpInside) if let count = self.tabBar.items?.count { let i = floor(Double(count / 2)) let item = self.tabBar.items![Int(i)] item.title = "" } } 

对于Swift

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2.0)), dispatch_get_main_queue(), { let button: UIButton = UIButton(type: .Custom) let win:UIWindow = UIApplication.sharedApplication().delegate!.window!! button.frame = CGRectMake(0.0, win.frame.size.height - 65, 55, 55) button.center = CGPoint(x:win.center.x , y: button.center.y) button.setBackgroundImage(UIImage(named: "Camera") , forState: .Normal) button.setBackgroundImage(UIImage(named: "Camera"), forState: .Highlighted) win.addSubview(button) }); 

对于隐藏UITabbar,我制作自定义UITabbarController并插入此方法。

 - (void)viewDidLoad { [super viewDidLoad]; [self addCenterButtonWithImage:[UIImage imageNamed:@"logo"] highlightImage:[UIImage imageNamed:@"logo"]]; } - (void)addCenterButtonWithImage:(UIImage*)buttonImage highlightImage:(UIImage*)highlightImage { float paddingBottom = 10; UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height); [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted]; CGRect rectBoundTabbar = [self.tabBar bounds]; float xx = CGRectGetMidX(rectBoundTabbar); float yy = CGRectGetMidY(rectBoundTabbar) - paddingBottom; button.center = CGPointMake(xx, yy); [self.tabBar addSubview:button]; [self.tabBar bringSubviewToFront:button]; // add handle [button addTarget:self action:@selector(handleTouchTabbarCenter:) forControlEvents:UIControlEventTouchUpInside]; // hide title item menu NSInteger count = [self.tabBar.items count]; NSInteger i = floor(count / 2.0); UITabBarItem *item = [self.tabBar.items objectAtIndex:i]; [item setTitle:nil]; } - (void)handleTouchTabbarCenter:(id)sender { // go to some view } 

我跟着@Michael Dautermann的答案,但button从来没有注册水龙头,所以我修改它使其工作:

  func handleTouchTabbarCenter() { if let count = self.tabBar.items?.count { let i = floor(Double(count / 2)) self.selectedViewController = self.viewControllers?[Int(i)] } } func addCenterButton(withImage buttonImage : UIImage, highlightImage: UIImage) { self.centerButton = UIButton(type: .custom) self.centerButton?.autoresizingMask = [.flexibleRightMargin, .flexibleTopMargin, .flexibleLeftMargin, .flexibleBottomMargin] self.centerButton?.frame = CGRect(x: 0.0, y: 0.0, width: buttonImage.size.width, height: buttonImage.size.height) self.centerButton?.setBackgroundImage(buttonImage, for: .normal) self.centerButton?.setBackgroundImage(highlightImage, for: .highlighted) self.centerButton?.isUserInteractionEnabled = true let heightdif: CGFloat = buttonImage.size.height - (self.tabBar.frame.size.height); if (heightdif < 0){ self.centerButton?.center = (self.tabBar.center) } else{ var center: CGPoint = (self.tabBar.center) center.y = center.y - 24 self.centerButton?.center = center } self.view.addSubview(self.centerButton!) self.tabBar.bringSubview(toFront: self.centerButton!) self.centerButton?.addTarget(self, action: #selector(handleTouchTabbarCenter), for: .touchUpInside) if let count = self.tabBar.items?.count { let i = floor(Double(count / 2)) let item = self.tabBar.items![Int(i)] item.title = "" } } 

斯威夫特3,4:

我在UITabBarController子类的viewDidLoad中使用这个代码:

 let button = UIButton() button.setImage(UIImage(named: "home"), for: .normal) button.sizeToFit() button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) tabBar.centerXAnchor.constraint(equalTo: button.centerXAnchor).isActive = true tabBar.topAnchor.constraint(equalTo: button.centerYAnchor).isActive = true 

有时我也设置button.adjustsImageWhenHighlighted = false来模仿其他项目的行为,或者更改约束constant属性来向上或向下移动button。

我已经采取了曼努埃尔的例子(接受的答案),并添加了一个调整底部安全区插入由于iPhone X的问题。

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height); [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted]; CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height; CGPoint center = self.tabBar.center; if (heightDifference >= 0) { center.y = center.y - heightDifference/2.0; } if (@available(iOS 11.0, *)) { UIWindow *window = UIApplication.sharedApplication.keyWindow; CGFloat bottomPadding = window.safeAreaInsets.bottom; center.y = center.y - bottomPadding; } [self.view addSubview:button];