如何在UITabbar自定义修改并添加UIBarButtomItem ----ios

如下图效果图:

我觉得挺好看的,哈哈哈

分析:

如果我们直接调用系统的API,一个一个控制器添加到tabbar中,效果会是这样

好丑!,原因是本来图标大小不合适,而且系统会帮你渲染。

我这里是通过KVC方法修改了系统的UITabbar,使用自定义的Tabbar

//在ABTabbarControl.m文件中,继承与UITabbarControl
//在创建一个ABTabbar,继承与UITabbar
//在viewdidLoad方法中替换系统的Tabbar
override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        setupNav()
        setupTabBar()

    }

 func setupTabBar(){

        let tabbar = ABTabbar()
        setValue(tabbar, forKey: "tabBar")

    }

我的思路是这样的,先把中间那个按钮不加入tabbar中,而是通过重写它的layoutSubview方法在加入进去 

然后在ABTabbar重写它的layoutSubview方法

  

import UIKit

class ABTabbar: UITabBar {
//创建中间的那个按钮
     lazy var plusButton : UIButton =  {
        let btn = UIButton.init(type: UIButtonType.Custom)
        btn.setImage(UIImage(named: "icon_tabBar_speedy_menu_selected"), forState: .Normal)
        btn.setImage(UIImage(named: "icon_tabBar_speedy_menu"), forState: .Selected)
        btn.sizeToFit()
        self.addSubview(btn)
        return btn

    }()

    override func layoutSubviews() {
        super.layoutSubviews()

        let count = (items?.count)! + 1
        var x : CGFloat = 0.0
        let y : CGFloat = 0.0
        let w : CGFloat = bounds.size.width / CGFloat(count)
        let h : CGFloat = bounds.size.height

        var num = 0
        for item in self.subviews{
          //判断是否为button
            if !item.isKindOfClass(NSClassFromString("UITabBarButton")!) {continue}
         //   留一个位置给中间的button
            if num == 2 {num = 3}
            x = CGFloat(num) * w
            item.frame = CGRectMake(x, y, w, h)
            num = num + 1

        }
        //这是给中间的button设置frame,在中间的位置,
       //我在Y值上减了15, 这样它的位置会稍微移上一点,感觉很好看
        self.plusButton.center = CGPointMake(self.frame.size.width * 0.5 ,(self.frame.size.height * 0.5 - 15))

    }

}

  

时间: 2024-10-06 00:07:19

如何在UITabbar自定义修改并添加UIBarButtomItem ----ios的相关文章

cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)

转:http://blog.csdn.net/ae6623/article/details/8861065 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: 下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一名合格的用户,我表示很不开心. 于是,打开 Nodepad++,寻找C:\tomcat7\webapps\casServer\WEB-INF\view\jsp\default\ui \casLoginView.jsp这个页

每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoint 自定义列表项添加callout菜单.希望能够给大家带来一些帮助. 1.  在aspx页引用可视化Web部件 有时候会需要在页面中引用项目中创建的可视化Web部件,具体步骤有以下这几步: 1) 在aspx页面顶部注册该可视化Web部件 示例如下: <%@ Register Tagprefix=&qu

如何在ppt或word中添加高亮代码?

如何在ppt或word中添加高亮代码? 问题: 如何ppt中添加带有语法高亮的程序代码,就如同下面的形式(在ppt嵌入高亮代码,且可以编辑,带有行号) 详细的要求如下: 1.代码带有语法高亮. 2.结果是矢量图,也就是说可以随便缩小放大的,因此别拿直接对代码截图来忽悠我. 3.最好带有行号. 方法一: 下载软件SciTE,下载地址:http://www.fauskes.net/nb/syntaxms/ 这个软件是我从网上搜到的,外国人写的.效果如下: 不过要把带有语法高亮的格式拷贝到ppt里有点

Thinkphp框架中自定义修改success和error页面

Thinkphp框架中自定义修改success和error页面 Thinkphp框架的默认success和error太难看,可以自定义设置,步骤如下: (注意:TP原框架中的success跳转有问题,先修改框架内容) 在TP的Controller.class.php中L284行下增加exit; 1.修改配置文件,增加自定义页面路径(在Admin模块下的config.php中增加) // 跳转页面模板 'TMPL_ACTION_ERROR' => MODULE_PATH.'View/Common/

vc中json文件的读取、修改和添加字段的方法

前言: 本代码涉及到对json文件的读取.修改和添加方法 WTL中radir button的状态判断和设置可选以及取消可选 示例: 所需头文件: #include <json.h> #include <file_io.h> 代码部分: //读取下载线路在界面上的radir button中显示 void CMainDlg::read_download_line_from_cfg() { std_string strDownloadLine; file_io<> json_

android如何在textview或edittext上添加表情

先上效果图: 首先来写一个表情的GridView public class EmotionView extends LinearLayout implements OnItemClickListener { private GridView mGridView; private static final ArrayList<Integer> emotionDisplayList = new ArrayList<Integer>(); public static final Link

ActionBar自定义修改无效解决方法

如果程序支持API11以下的版本,那么需要修改多个地方 values-v14 和values-v11下面的styles中也要写上 <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="act

Liferay 6.2 改造系列之二十:修改默认添加用户权限及用户是否拥有个人站点的配置

1.修改默认添加用户权限为User,而非Powers User: 在/portal-master/portal-impl/src/portal.properties文件中有如下配置: # # Input a list of default role names separated by \n characters that are # associated with newly created users. # admin.default.role.names=Power User\nUser

js实现class的样式的修改、添加、删除

比较常见的js前端功能,通过修改标签的className实现相应的功能 代码例如: <table> <tbody> <tr> <td>js实现class的样式的修改.添加.删除</td> <td> <a e_value="g_sn" ename="商品编码" class="goods_sale_property" href="javascript:void(0