[已解决]swift中UIBarButtonItem添加customView的Button的内容显示位置异常

折腾:
期间,如下代码:
       //3. switch team
        currentTeamName = "苏州达云网络科技有限公司"
        //currentTeamName = "苏州达云网络科技有"
        //currentTeamName = "苏州达云网络科技"

        //let currentTeamNameFont:UIFont = UIFont.systemFontOfSize(FONT_CURRENT_TEAM_NAME)
        let currentTeamNameFont:UIFont = FontCurrentTeamName
        let singleZhcnChar:String = "单" //single Zh-cn character for calc width
        let singleZhcnCharWidth:CGFloat = calcLabelTextSize(singleZhcnChar,
            font: currentTeamNameFont).width
        print("singleZhcnCharWidth=\(singleZhcnCharWidth)")
        let zhcnCharNumLimit:Int = 8
        let currentTeamNamelimitWidth:CGFloat = singleZhcnCharWidth * CGFloat(zhcnCharNumLimit)
            //add some more extra width to let exceed char show as "..."
            + singleZhcnCharWidth*0.9

        print("currentTeamNamelimitWidth=\(currentTeamNamelimitWidth)")

        currentTeamLabel = UILabel(frame: CGRectMake(
            0,
            0, //statusBarFrame.height, //0,
            currentTeamNamelimitWidth,//150,//self.view.bounds.width - 108,
            HeightNaviBar))
        print("currentTeamLabel.frame=\(currentTeamLabel.frame)")
        currentTeamLabel.textColor = UIColor.whiteColor()
        currentTeamLabel.textAlignment = NSTextAlignment.Left
        currentTeamLabel.center.y = naviBarView.frame.height / 2
        currentTeamLabel.font = currentTeamNameFont
        currentTeamLabel.text = currentTeamName


        let switchTeamDownImage = UIImage(named: "navi_switch_team_down")
        //print("switchTeamDownImage?.size=\(switchTeamDownImage?.size)")//switchTeamDownImage?.size=Optional((8.0, 4.5))
        //use the max of real image size as width
        let switchTeamDownImageMaxSize =
            switchTeamDownImage?.size.width > switchTeamDownImage?.size.height
            ? switchTeamDownImage?.size.width:switchTeamDownImage?.size.height

        let switchTeamDownImageFrame = CGRectMake(
                currentTeamLabel.bounds.width + 10,
                0,
                switchTeamDownImageMaxSize!,//HEIGHT_NAVI_BAR,
                switchTeamDownImageMaxSize!)//HEIGHT_NAVI_BAR)
        let switchTeamDownImageView = UIImageView(frame: switchTeamDownImageFrame)
        switchTeamDownImageView.image = switchTeamDownImage
        switchTeamDownImageView.center.y = currentTeamLabel.center.y
        //switchTeamDownImageView.contentMode = UIViewContentMode.ScaleAspectFit
        switchTeamDownImageView.contentMode = UIViewContentMode.Center
        //switchTeamDownImageView.contentScaleFactor = 1.0
        //for debug
        //switchTeamDownImageView.backgroundColor = UIColor.greenColor()

        //let switchTeamButton = UIButton()
        switchTeamButton.frame = CGRectMake(
            0, //10,
            0, //statusBarView.bounds.height,
            currentTeamLabel.bounds.size.width + 10 + switchTeamDownImageView.bounds.size.width,
            HeightNaviBar)
        switchTeamButton.addTarget(
            self,
            action:Selector("toggleSwitchTeamDropdownList"),
            forControlEvents:UIControlEvents.TouchUpInside)
        switchTeamButton.addSubview(currentTeamLabel)
        switchTeamButton.addSubview(switchTeamDownImageView)
        //self.view.addSubview(switchTeamButton)
        //naviBarView.addSubview(switchTeamButton)
        //for debug
        switchTeamButton.backgroundColor = UIColor.purpleColor()

        let switchTeamNaviBarButtonItem = UIBarButtonItem(customView: switchTeamButton)
        self.navigationItem.setLeftBarButtonItem(switchTeamNaviBarButtonItem, animated: true)

对应的显示位置有误,错乱了:

navi bar items position messy

[解决过程]

1.感觉是那个currentTeamLabel导致的错乱。。。

但是一直调整:
currentTeamLabel
switchTeamDownImageFrame
switchTeamButton
的位置,都没有解决问题。
其中改为:
        let switchTeamView = UIView(frame:
            CGRectMake(
                0, //10,
                0, //statusBarView.bounds.height,
                currentTeamLabel.bounds.size.width + 10 + switchTeamDownImageView.bounds.size.width,
                HeightNaviBar)
        )
        switchTeamView.addSubview(currentTeamLabel)
        switchTeamView.addSubview(switchTeamDownImageView)

        //let switchTeamButton = UIButton()
//        switchTeamButton.frame = CGRectMake(
//            0, //10,
//            0, //statusBarView.bounds.height,
//            currentTeamLabel.bounds.size.width + 10 + switchTeamDownImageView.bounds.size.width,
//            HeightNaviBar)
        switchTeamButton.addTarget(
            self,
            action:Selector("toggleSwitchTeamDropdownList"),
            forControlEvents:UIControlEvents.TouchUpInside)
//        switchTeamButton.addSubview(currentTeamLabel)
//        switchTeamButton.addSubview(switchTeamDownImageView)
        switchTeamButton.addSubview(switchTeamView)
        //self.view.addSubview(switchTeamButton)
        //naviBarView.addSubview(switchTeamButton)
        //for debug
        switchTeamButton.backgroundColor = UIColor.purpleColor()
虽然表面上看,位置是对了,但是实际上,按钮的区域已经错位了:
红色区域,才是button的位置
并且:点击button的位置,和button之外的位置,都没有反应了:
click outside of button in navi bar response
搜:
swift UIBarButtonItem  customView
参考:
后来发现还是自己的对齐设置有问题,变成:
        //currentTeamLabel.center.y = naviBarView.frame.height / 2
        switchTeamDownImageView.center.y = currentTeamLabel.center.y
 即可显示位置正常:
show correct postion for label in navi bar
[总结]
此处的UIBarButtonItem添加customView的Button的内容显示位置异常的根本原因是:
由于之前的代码是为了放在Navigation bar的,所以加了一些对齐方面的设置,而此处去掉即可正常显示位置。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量