Ios 将属性标签设置为导航标题

Ios 将属性标签设置为导航标题,ios,uinavigationcontroller,uilabel,Ios,Uinavigationcontroller,Uilabel,我正在使用swift 4开发IOS。我必须使导航控制器,与中心对齐的应用程序标题与图像在其左侧。但我不知道如何将图像附加到其左侧。属性图像始终位于其右侧 为此,我将附加字符串两次。下面是代码 //Get image and set it's size let image = UIImage(named: "user2") let newSize = CGSize(width: 30, height: 30) //Resize image UIGraphic

我正在使用swift 4开发IOS。我必须使导航控制器,与中心对齐的应用程序标题与图像在其左侧。但我不知道如何将图像附加到其左侧。属性图像始终位于其右侧

为此,我将附加字符串两次。下面是代码

   //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
我得到的是一些类似下图的东西在左边

我想要什么:

        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()
我只希望图像显示的文本和图像之间的空间。
我希望图像是好看的。文本应垂直于图像中心。实现这一目标的好方法是什么

如果要调整附件位置,必须使用
attachment.bounds
属性,如果要调整文本垂直对齐方式,则需要使用
nsattributestring
基线偏移

更新

        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
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString
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
        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
    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: [NSAttributedString.Key.baselineOffset :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: [NSBaselineOffsetAttributeName :6]))
        self.lblText.attributedText = normalNameString
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString
Swift 5更新

        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
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString

如果要调整附件位置,必须使用
attachment.bounds
属性,如果要调整文本垂直对齐,则需要使用
NSAttributedString
基线偏移

更新

        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
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString
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
        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
    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: [NSAttributedString.Key.baselineOffset :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: [NSBaselineOffsetAttributeName :6]))
        self.lblText.attributedText = normalNameString
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString
Swift 5更新

        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
        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
    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: [NSAttributedString.Key.baselineOffset :6]))
    self.lblText.attributedText = normalNameString

使用此代码,您将获得您的输出:

        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()
输出:-


希望对你有帮助

使用此代码,您将获得您的输出:

        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()
输出:-


希望对你有帮助

我想调整文本和图像之间的空间,文本应该垂直居中。请给我看代码,但你在文本中使用空格给了空格。有没有其他办法给空间?另外,请告诉我图像首选大小。通过使用负值@Androidteem更改附件边界x,可以达到相同的效果。在文本中添加空格很容易。我想调整文本和图像之间的空格,并且文本应垂直居中。请给我看代码,但你在文本中使用空格给了空格。有没有其他办法给空间?另外,请告诉我图像的首选大小您可以通过将附件边界x更改为负值来实现相同的效果@Androidteem,在文本中添加空格很容易没有水平空格,但是设置图像与文本高度相等的想法很好没有水平空格,然而,将图像设置为文本高度相等的想法是好的