Установка атрибутивной метки в качестве заголовка навигации - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю на IOS, используя swift 4. Мне нужно сделать контроллер Navigation с центром по центру заголовка приложения с изображением слева. Но я не понимаю, как прикрепить изображение слева. Приписанное изображение всегда идет вправо.

Для этого я добавляю строку дважды. ниже код

   //Get image and set it's size
    let image = UIImage(named: "user2")
    let newSize = CGSize(width: 30, height: 30)

    //Resize image
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
    image?.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
    let imageResized = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    //Create attachment text with image
    let attachment = NSTextAttachment()
    attachment.image = imageResized
    let attachmentString = NSAttributedString(attachment: attachment)
    let myString = NSMutableAttributedString(string: "")
    myString.append(attachmentString)
    let strAttachment = NSAttributedString(string: "My Ios App" )
    myString.append(strAttachment)

    navLabel.attributedText = myString

    self.navigationItem.titleView = navLabel

То, что я получаю, это нечто вроде ниже изображения слева enter image description here

что я хочу:

Я просто хочу, чтобы изображение отображалось с пробелом между текстом и изображением. Я хочу, чтобы изображение выглядело хорошо и красиво. Текст должен быть в центре вертикально к изображению. Каков хороший способ достижения этого?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Используя этот код, вы получите ваш вывод:

        let navgationView = UIView()

        let label = UILabel()
        label.text = " My Ios App"
        label.sizeToFit()
        label.center = navgationView.center
        label.textAlignment = NSTextAlignment.center

        let image = UIImageView()
        image.image = UIImage(named: "user")
        let imageAspect = image.image!.size.width/image.image!.size.height
        image.frame = CGRect(x: label.frame.origin.x-label.frame.size.height*imageAspect, y: label.frame.origin.y, width: label.frame.size.height*imageAspect, height: label.frame.size.height)
        image.contentMode = UIViewContentMode.scaleAspectFit

        navgationView.addSubview(label)
        navgationView.addSubview(image)

        self.navigationItem.titleView = navgationView
        navgationView.sizeToFit()

Выход: -

enter image description here

Надеюсь, это поможет. !!

0 голосов
/ 26 апреля 2018

Если вы хотите настроить положение вложения, вы должны использовать свойство attachment.bounds, а если вы хотите отрегулировать вертикальное выравнивание текста, вам нужно использовать NSAttributedString baselineOffset key

Обновление

код Swift 3

        let normalNameString = NSMutableAttributedString.init(string: "")

        let attachment = NSTextAttachment()
        attachment.image = imageHelper.pgImage(textValue: "PG-13")
        attachment.bounds = CGRect(x: 0, y: 0, width: (attachment.image?.size.width)!, height: (attachment.image?.size.height)!)
        normalNameString.append(NSAttributedString(attachment: attachment))
        normalNameString.append(NSAttributedString(string: " My Ios App", attributes: [NSBaselineOffsetAttributeName :6]))
        self.lblText.attributedText = normalNameString

код Swift 4

        let normalNameString = NSMutableAttributedString.init(string: "")

        let attachment = NSTextAttachment()
        attachment.image = imageHelper.pgImage(textValue: "PG-13")
        attachment.bounds = CGRect(x: 0, y: 0, width: (attachment.image?.size.width)!, height: (attachment.image?.size.height)!)
        normalNameString.append(NSAttributedString(attachment: attachment))
        normalNameString.append(NSAttributedString(string: " My Ios App", attributes: [NSAttributedStringKey.baselineOffset :6]))
        self.lblText.attributedText = normalNameString

enter image description here

...