2016-06-07 12 views
5

मैं UIKitUILabel में अंकों के बीच अंतर को बदलना चाहता हूं ताकि यह बराबर हो।मैं UILabel में अक्षर अंतर कैसे बदलूं?

मानक अंतर के साथ, लेबल इस तरह दिखता है:

label with uneven character spacing

मैं इसे करना चाहते हैं इस तरह देखने के लिए:

label with even character spacing

यह कैसे प्राप्त किया जा सकता?

उत्तर

9

आप एक जिम्मेदार ठहराया स्ट्रिंग पर NSKernAttributeName विशेषता का उपयोग कर सकते हैं:

UILabel *l = [UILabel new] 

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"127"] 

//the value paramenter defines your spacing amount, and range is the range of characters in your string the spacing will apply to. Here we want it to apply to the whole string so we take it from 0 to text.length. 
[text addAttribute:NSKernAttributeName value:[NSNumber numberWithDouble:-0.5] range:NSMakeRange(0, text.length)]; 
[l setAttributedText:text]; 
+0

धन्यवाद जे 2 के लिए कोई विकल्प नहीं दिखता है। मैं स्ट्रिंग के एक subrange में कर्नाई लागू करने की क्षमता के बारे में भूल गया। –

1
NSString *myString = @"127"; 
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:myString]; 

float letterSpacing = -1.50f; // change spacing here 
[attributedString addAttribute:NSKernAttributeName value:@(letterSpacing) range:NSMakeRange(0, [myString length])]; 
[myLabel setAttributedText:attributedString]; 

इसके अलावा अधिक जानकारी और परिणामों के लिए यह देखें: लेबल पर http://www.devsign.co/notes/tracking-and-character-spacing

0

क्लिक करें और अपने गुण निरीक्षक के पास जाओ। सादा से जिम्मेदार पाठ बदलें। आप रिक्ति के लिए कई विकल्प होंगे। उम्मीद है की यह मदद करेगा।

+0

क्या आप समझा सकते हैं, क्योंकि मुझे "अक्षर अंतर" –

5

आप एक NSAttributedString का उपयोग करें और NSKernAttributeName विशेषता के साथ खेल सकते हैं। इसके लिए डिफ़ॉल्ट मान 0 है, इसलिए आप इसे ऋणात्मक संख्या में सेट करना चाहते हैं।

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/#//apple_ref/doc/constant_group/Character_Attributes

Obj सी में

आप कुछ इस तरह कर सकते हैं:

NSMutableAttributedString* attrStr = [[NSMutableAttributedString alloc]initWithString: @"Test test test test "]; 
[attrStr addAttribute:NSKernAttributeName value:@(4.0) range:NSMakeRange(0, attrStr.length)]; 

label.attributedText = attrStr; 

स्विफ्ट में आप कुछ इस तरह कर सकता है:

let myTitle = "my title" 
let titleLabel = UILabel() 
let attributes: NSDictionary = [ 
    NSFontAttributeName:UIFont(name: "FONT_NAME", size: TEXT_SIZE), 
    NSKernAttributeName:CGFloat(2.0) 
] 

let attributedTitle = NSAttributedString(string: myTitle, attributes:attributes as? [String : AnyObject]) 

titleLabel.attributedText = attributedTitle 
15

सबसे आसान तरीका है एक बनाने के लिए है कस्टम UILabel वर्ग और स्टोरीबोर्ड से अक्षर अंतर सेट करें।

open class CustomLabel : UILabel { 
    @IBInspectable open var characterSpacing:CGFloat = 1 { 
     didSet { 
      let attributedString = NSMutableAttributedString(string: self.text!) 
      attributedString.addAttribute(NSKernAttributeName, value: self.characterSpacing, range: NSRange(location: 0, length: attributedString.length)) 
      self.attributedText = attributedString 
     } 

    } 
} 

enter image description here

2

NSKernAttributeName इस्तेमाल किया जा सकता।

लेकिन अन्य उत्तरों में सुधार में: पूर्ण पाठ लंबाई पर लागू न करें, लेकिन (टेक्स्ट। लम्बाई - 1)

नकारात्मक या सकारात्मक अंतर पत्र में जोड़ा गया है और यह अंतिम के लिए आवश्यक नहीं है। मान लीजिए कि आप एक सकारात्मक अंतर जोड़ देंगे जो आखिरी पत्र के बाद एक अंतराल में समाप्त होगा। एक केंद्रित स्ट्रिंग अब केंद्रित नहीं होगा। नकारात्मक रिक्ति के लिए भी यही लागू होता है।

NSString *text = @"Sample Text";  
UILabel *label = [UILabel new] 

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: text]; 
[attributedString addAttribute:NSKernAttributeName value:[NSNumber numberWithDouble:-1.0] range:NSMakeRange(0, text.length-1)]; 

[label setAttributedTitle:attributedString forState:UIControlStateNormal]; 

पूर्ण पाठ लंबाई के लिए लागू।

Applied to full text length.

पर लागू (पाठ की लंबाई - 1)। Applied to (text length - 1).

संबंधित मुद्दे