Swift: пользовательская панель навигации с центрированными кнопками - PullRequest
0 голосов
/ 27 августа 2018

Я написал пользовательскую панель навигации, но проблема заключается в том, что текст внутри моих кнопок не идеально выровнен.Например, смотрите кнопку +.

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 Ответ

0 голосов
/ 27 августа 2018

Существует несколько способов исправить это:

  1. Использование + изображение, изображение будет правильно отцентрировано на UIButton.

  2. Изменить заголовоквставки UIButton, добавьте еще несколько вставок снизу и слева, UIButton имеет свойство titleInsets;

  3. Измените шрифт o_O, что является глупой идеей, но также работает, выможно отредактировать шрифт и сделать знак «+» центрированным в области рисования.

Надеюсь, это поможет!Удачи!

...