क्या पाठ की कई पंक्तियों को UILabel
पसंद करने का एक तरीका है UITextView
या मुझे इसके बजाय दूसरे का उपयोग करना चाहिए?
क्या पाठ की कई पंक्तियों को UILabel
पसंद करने का एक तरीका है UITextView
या मुझे इसके बजाय दूसरे का उपयोग करना चाहिए?
जवाबों:
मुझे एक उपाय मिला।
एक को निम्नलिखित कोड जोड़ना होगा:
// Swift
textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping
textLabel.numberOfLines = 0
// For Swift >= 3
textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B'
textLabel.numberOfLines = 0
// Objective-C
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
// C# (Xamarin.iOS)
textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;
पुराना उत्तर बहाल (संदर्भ और देवियों के लिए नीचे iOS 6.0 का समर्थन करने को तैयार):
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
इस ओर: दोनों एनुम मान 0
वैसे भी उपज देते हैं ।
cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
औरcell.textLabel?.numberOfLines = 0
आईबी में, 0 के लिए लाइनों की संख्या निर्धारित करें (असीमित लाइनों की अनुमति देता है)
जब आईबी का उपयोग करके टेक्स्ट फ़ील्ड के भीतर टाइप किया जाता है, तो रिटर्न डालने के लिए "ऑल्ट-रिटर्न" का उपयोग करें और अगली पंक्ति पर जाएं (या आप लाइनों द्वारा पहले से अलग किए गए पाठ में कॉपी कर सकते हैं)।
सबसे अच्छा समाधान जो मैंने पाया है (अन्यथा एक निराशाजनक समस्या जिसे फ्रेमवर्क में हल किया जाना चाहिए था) वैकिक के समान है।
बस आईबी या कोड में 0 से लाइनों की संख्या निर्धारित करें
myLabel.numberOfLines = 0;
यह आवश्यक रेखाओं को प्रदर्शित करेगा लेकिन लेबल को फिर से प्रदर्शित करेगा ताकि इसका केंद्र क्षैतिज रूप से हो (ताकि 1 पंक्ति और 3 पंक्ति लेबल उनके क्षैतिज स्थिति में संरेखित हो)। उस जोड़ने को ठीक करने के लिए:
CGRect currentFrame = myLabel.frame;
CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode];
currentFrame.size.height = expected.height;
myLabel.frame = currentFrame;
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
अगर आपको इसका उपयोग करना है:
myLabel.numberOfLines = 0;
प्रॉपर्टी आप एक मानक लाइन ब्रेक का उपयोग कर सकते हैं ("\n")
, कोड में, एक नई लाइन को मजबूर करने के लिए।
चलो यह करके देखें
textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated
textLabel.numberOfLines = 0;
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
उपरोक्त समाधान मेरे मामले में काम नहीं करता है। मैं इस तरह कर रहा हूँ:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ...
CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
return size.height + 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
// ...
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
}
// ...
UILabel *textLabel = [cell textLabel];
CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
constrainedToSize:CGSizeMake(240.0, 480.0)
lineBreakMode:UILineBreakModeWordWrap];
cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);
//...
}
कहानी बोराद का उपयोग करें: शून्य तक ...... की संख्या निर्धारित करने के लिए लेबल का चयन करें या इसे देखें
स्विफ्ट 3
डायनामिक टेक्स्ट जानकारी के लिए लाइनों की संख्या शून्य सेट करें, यह अलग-अलग टेक्स्ट के लिए उपयोगी होगा।
var label = UILabel()
let stringValue = "A label\nwith\nmultiline text."
label.text = stringValue
label.numberOfLines = 0
label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame
UILabel *helpLabel = [[UILabel alloc] init];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
helpLabel.attributedText = attrString;
// helpLabel.text = label;
helpLabel.textAlignment = NSTextAlignmentCenter;
helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
helpLabel.numberOfLines = 0;
कुछ कारणों से आईओएस 6 में मेरे लिए काम नहीं करना सुनिश्चित नहीं है कि क्यों। बिना किसी जिम्मेदार पाठ के साथ इसे आज़माया। कोई सुझाव।
इन चीजों ने मेरी मदद की
UILabel के इन गुणों को बदलें
label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;
और इनपुट देते समय String यूज़ \ n को अलग-अलग लाइन में अलग-अलग शब्द प्रदर्शित करने के लिए।
उदाहरण :
NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
विधि 1:
extension UILabel {//Write this extension after close brackets of your class
func lblFunction() {
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want word wraping
//OR
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
अब ऐसे ही कॉल करें
myLbl.lblFunction()//Replace your label name
पूर्व:
Import UIKit
class MyClassName: UIViewController {//For example this is your class.
override func viewDidLoad() {
super.viewDidLoad()
myLbl.lblFunction()//Replace your label name
}
}//After close of your class write this extension.
extension UILabel {//Write this extension after close brackets of your class
func lblFunction() {
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want word wraping
//OR
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
विधि 2:
प्रोग्राम के रूप में
yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping//If you want word wraping
//OR
yourLabel.lineBreakMode = .byCharWrapping//If you want character wraping
विधि 3:
स्टोरी बोर्ड के माध्यम से
0 (शून्य) सेट की गई कई लाइनों को प्रदर्शित करने के लिए, यह आपके लेबल में एक से अधिक लाइन प्रदर्शित करेगा।
यदि आप n लाइनें प्रदर्शित करना चाहते हैं, तो n सेट करें।
स्क्रीन के नीचे देखें।
यदि आप लेबल के लिए न्यूनतम फ़ॉन्ट आकार सेट करना चाहते हैं तो ऑटोश्रंक पर क्लिक करें और न्यूनतम फ़ॉन्ट आकार विकल्प चुनें
स्क्रीन के नीचे देखें
यहां न्यूनतम फ़ॉन्ट आकार सेट करें
EX: 9 (इस छवि में)
यदि आपके लेबल को उस समय अधिक पाठ मिलता है, तो आपका लेबल पाठ 9 तक सिकुड़ जाएगा
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
आप स्टोरीबोर्ड के माध्यम से भी ऐसा कर सकते हैं:
आपको यह कोशिश करनी चाहिए:
-(CGFloat)dynamicLblHeight:(UILabel *)lbl
{
CGFloat lblWidth = lbl.frame.size.width;
CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:lbl.font}
context:nil];
return lblTextSize.size.height;
}
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
इस फ़ंक्शन पास स्ट्रिंग में जिसे आप लेबल में असाइन करना चाहते हैं और 235 के स्थान पर self.activityFont के स्थान पर फ़ॉन्ट आकार और लेबल चौड़ाई पास करते हैं, अब आपको अपने स्ट्रिंग के अनुसार लेबल ऊंचाई मिलती है। यह ठीक काम करेगा।
-(float)calculateLabelStringHeight:(NSString *)answer
{
CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
return textRect.size.height;
}
नीचे या तो कोड में या स्टोरीबोर्ड में सेट करें
Label.lineBreakMode = NSLineBreakByWordWrapping; लेबल.नंबरऑफलाइन = 0;
और लेबल के लिए बाएं, दाएं, ऊपर और नीचे की बाधाओं को सेट करना न भूलें अन्यथा यह काम नहीं करेगा।
स्विफ्ट 4:
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.preferredMaxLayoutWidth = superview.bounds.size.width - 10
C # पर, इसने मेरे लिए UITableViewCell के अंदर काम किया।
UILabel myLabel = new UILabel();
myLabel.Font = UIFont.SystemFontOfSize(16);
myLabel.Lines = 0;
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;
myLabel.InvalidateIntrinsicContentSize();
myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
myCell.ContentView.AddSubview(myLabel);
मुझे लगता है कि यहाँ बिंदु है: -
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;
यह कोड पाठ के अनुसार आकार की ऊंचाई पर लौट रहा है
+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
{
CGFloat result = font.pointSize+4;
if (text)
{
CGSize size;
CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:font}
context:nil];
size = CGSizeMake(frame.size.width, frame.size.height+1);
result = MAX(size.height, result); //At least one row
}
return result;
}
UILineBreakModeWordWrap
iOS 6 में पदावनत किया गया था। अब आपको यहाँNSLineBreakByWordWrapping = 0
प्रलेखन देखना होगा