【问题标题】:Swift: Custom Navigationbar with centered buttonsSwift:带有居中按钮的自定义导航栏
【发布时间】:2018-08-27 07:08:26
【问题描述】:

我已经编写了一个自定义导航栏,但问题是我的按钮内的文本没有完全对齐。例如查看 + 按钮。

有什么改进的方法吗?

import UIKit

class DashboardNavbar: UINavigationBar {

    var titleLabel: UILabel?

    private var plusButton: UIButton?
    private var editButton: UIButton?

    var tap: UIGestureRecognizer?

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        isTranslucent = false
        addTitleLabel()
        addPlusButton()
        addEditButton()
    }



    private func addTitleLabel() {
        titleLabel = UILabel()
        titleLabel?.textColor = Styling.navigationbarTintColor
        titleLabel?.translatesAutoresizingMaskIntoConstraints = false
        titleLabel?.font = UIFont(name: "DIN Alternate", size: 17)

        if let titleLabel = titleLabel{

            addSubview(titleLabel)

            let leadingConstraint = NSLayoutConstraint(item: titleLabel, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 15)
            addConstraint(leadingConstraint)
            let centerYConstraint = NSLayoutConstraint(item: titleLabel, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0)
            addConstraint(centerYConstraint)
        }
    }

    private func addPlusButton(){


        plusButton = UIButton(type: .custom)
        plusButton?.setTitle("+", for: .normal)
        plusButton?.layer.backgroundColor = Styling.navigationbarTintColor.cgColor
        plusButton?.layer.cornerRadius = 15
        plusButton?.setTitleColor(.black, for: .normal)
        plusButton?.titleLabel?.font = UIFont(name: "DIN Alternate", size: 20)
        plusButton?.contentVerticalAlignment = .center
        plusButton?.contentHorizontalAlignment = .center
        plusButton?.titleLabel?.baselineAdjustment = .alignCenters


        if let plusButton = plusButton{
            addSubview(plusButton)
            plusButton.translatesAutoresizingMaskIntoConstraints = false

            let trailingConstraint = NSLayoutConstraint(item: plusButton, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: -15)
            addConstraint(trailingConstraint)

            let centerYConstraint = NSLayoutConstraint(item: plusButton, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0)
            addConstraint(centerYConstraint)

            let widthC = NSLayoutConstraint(item: plusButton, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 30)
            addConstraint(widthC)

            let heightC = NSLayoutConstraint(item: plusButton, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 30)
            addConstraint(heightC)
        }

    }

    private func addEditButton(){

        editButton = UIButton(type: .custom)
        editButton?.setTitle(LocalizedString("EDIT"), for: .normal)
        editButton?.layer.backgroundColor = Styling.navigationbarTintColor.cgColor
        editButton?.layer.cornerRadius = 15
        editButton?.setTitleColor(.black, for: .normal)
        editButton?.titleLabel?.font = UIFont(name: "DIN Alternate", size: 16)
        editButton?.contentVerticalAlignment = .center
        editButton?.contentHorizontalAlignment = .center
        editButton?.titleLabel?.baselineAdjustment = .alignCenters

        if let editButton = editButton{
            addSubview(editButton)
            editButton.translatesAutoresizingMaskIntoConstraints = false
            let trailingConstraint = NSLayoutConstraint(item: editButton, attribute: .trailing, relatedBy: .equal, toItem: plusButton!, attribute: .leading, multiplier: 1.0, constant: -15)
            addConstraint(trailingConstraint)
            let centerYConstraint = NSLayoutConstraint(item: editButton, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0)
            addConstraint(centerYConstraint)

            let widthC = NSLayoutConstraint(item: editButton, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 80)
            addConstraint(widthC)
            let heightC = NSLayoutConstraint(item: editButton, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 30)
            addConstraint(heightC)
        }
    }






    func setTitle(title: String){
        titleLabel?.text = title
    }
}

【问题讨论】:

    标签: ios swift uikit uinavigationbar


    【解决方案1】:

    有几种方法可以纠正这个问题:

    1. 使用 + 图像,图像将在 UIButton 上正确居中。

    2. 更改UIButton 的标题插入,从底部和左侧多插入一些,UIButton 具有titleInsets 属性;

    3. 更改字体o_O,这是一个愚蠢的想法,但也可以工作,你可以编辑字体并将“+”号放在绘图区域的中心。

    希望这会有所帮助!祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多