代码之家  ›  专栏  ›  技术社区  ›  netshark1000

Swift:带居中按钮的自定义导航栏

  •  0
  • netshark1000  · 技术社区  · 6 年前

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

    enter image description here

    有什么改进的办法吗?

    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
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Fahri Azimov    6 年前

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

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

    2. 更改的标题插入 U按钮 ,从底部和左侧再插入一些, U按钮 titleInsets 财产;

    3. 把字体改成oúo,这是一个愚蠢的想法,但也可以工作,你可以编辑字体,并使“+”符号集中在绘图区域。

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