2016-06-15 6 views
0

Ich war auf der Suche nach, wie Zeichenabstand in UILabel s zu erhöhen, um meine UI-Design-Implementierungen für die Apps, die ich mache, attraktiver zu machen. Und ich fand folgende answer, which tells it allows to adjust the Text Kerning, und es ist in Swift geschrieben.iOS/Objecitve-C UILabellentext Kerning

Aber was ich brauchte, ist eine Objective-C-Lösung. Also habe ich versucht, den folgenden Code-Schnipsel zu konvertieren:

import UIKit 
@IBDesignable 
class KerningLabel: UILabel { 
    @IBInspectable var kerning:CGFloat = 0.0{ 
     didSet{ 
      if ((self.attributedText?.length) != nil) 
      { 
       let attribString = NSMutableAttributedString(attributedString: self.attributedText!) 
       attribString.addAttributes([NSKernAttributeName:kerning], range:NSMakeRange(0, self.attributedText!.length)) 
       self.attributedText = attribString 
      } 
     } 
    } 
} 

zu folgenden in Objective-C:
KerningLabel.h:

#import <UIKit/UIKit.h> 
IB_DESIGNABLE 
@interface KerningLabel : UILabel 
@property (nonatomic) IBInspectable CGFloat kerning; 
@end 

KerningLabel.m:

#import "KerningLabel.h" 

@implementation KerningLabel 
@synthesize kerning; 
- (void) setAttributedText:(NSAttributedString *)attributedText { 
    if ([self.attributedText length] > 0) { 
     NSMutableAttributedString *muAttrString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; 
     [muAttrString addAttribute:NSKernAttributeName value:@(self.kerning) range:NSMakeRange(0, [self.attributedText length])]; 
     self.attributedText = muAttrString; 
    } 
} 
@end 

Und es gibt das folgende Attribut in XCode IB, um das Ker anzupassen ning, enter image description here

Aber es scheint wirklich nicht auf der Benutzeroberfläche wirksam werden, wenn die App läuft und auch im Interface Builder der Text verschwindet.

Bitte jemand helfen Sie mir und weisen Sie darauf hin, was ich falsch gemacht habe.

Vielen Dank in Advanced!

Antwort

1

Sie möchten Ihre attributedText jedes Mal aktualisieren, wenn Kerning aktualisiert wird. Also, sollten Sie Ihre .h wie folgt aussehen:

IB_DESIGNABLE 
@interface KerningLabel : UILabel 

@property (nonatomic) IBInspectable CGFloat kerning; 

@end 

und .m:

@implementation KerningLabel 

- (void)setKerning:(CGFloat)kerning 
{ 
    _kerning = kerning; 

    if(self.attributedText) 
    { 
     NSMutableAttributedString *attribString = [[NSMutableAttributedString alloc]initWithAttributedString:self.attributedText]; 
     [attribString addAttribute:NSKernAttributeName value:@(kerning) range:NSMakeRange(0, self.attributedText.length)]; 
     self.attributedText = attribString; 
    } 
} 

@end 
+0

Perfect! Es hat die Fehler behoben, die ich in dem obigen Code in der Frage gemacht habe. Jetzt kann ich Kerning im IB bearbeiten. –

Verwandte Themen