আপনি কীভাবে কোনও ইউআইবাটনে মাল্টি-লাইন পাঠ্য যুক্ত করবেন?


368

আমার কাছে নিম্নলিখিত কোড আছে ...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

... ধারণাটি এই যে আমি বোতামটির জন্য বহু-লাইন পাঠ্য রাখতে পারি, তবে পাঠ্যটি সর্বদা ইউআইবাটনটির পটভূমির দ্বারা আবদ্ধ থাকে। বোতামের সংক্ষিপ্তসারগুলি দেখানোর জন্য একটি লগিং কল থেকে দেখা যায় যে ইউআইএলবেল যুক্ত করা হয়েছে, তবে পাঠ্যটি নিজেই দেখা যায় না। এটি ইউআইবাটনে একটি বাগ বা আমি কিছু ভুল করছি?


7
button.titleLabel?.numberOfLines = 0
ma11 শেই 28

2
এই অতি পুরানো কিউএর জন্য নোট করুন, আধুনিক এক্সকোড ভেরি সিম্পলাইয়ে, "অ্যাট্রিবিউটড টেক্সট" চয়ন করুন এবং তারপরে এটি তুচ্ছ, "চরিত্রের মোড়ক" নির্বাচন করুন।
ফ্যাটি

অনুরূপ প্রশ্নের আপডেট হওয়া উত্তরও দেখুন ।
টুলমেকারস্টেভ

বোতামের পাঠ্যের জন্য এই উত্তরটি (বহু লাইন, ফিট প্রস্থ, ফিট উচ্চতা) দেখুন স্ট্যাকওভারফ্লো.com
হামিদ রেজা আনসারী

উত্তর:


675

আইওএস 6 এবং তারপরের জন্য, একাধিক লাইনের অনুমতি দেওয়ার জন্য নিম্নলিখিতটি ব্যবহার করুন:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
// you probably want to center it
button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to 
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

আইওএস 5 এবং এর জন্য নীচে একাধিক লাইনের অনুমতি দেওয়ার জন্য ব্যবহার করুন:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
// you probably want to center it
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

আইওএস 9 ফরোয়ার্ডের জন্য 2017 ,

সাধারণত, এই দুটি জিনিস করুন:

  1. চয়ন "এট্রিবিউটেড পাঠ্য"
  2. "লাইন ব্রেক" পপআপে "ওয়ার্ড মোড়ানো" নির্বাচন করুন

5
দয়া করে নোট করুন যে এই অ্যাসাইনমেন্টগুলি আইওএস-এ অবমুক্ত করা হয়েছে the আপডেট নাইটেক্সটির জন্য নীচের উত্তরটি @ নীকিকি দেখুন।
অ্যারন ব্র্যাজার

6
ঠিক তাই লোকেরা জানেন: আপনি এনএসএট্রিবিউটেড স্ট্রিং ব্যবহার করলে এটি কাজ করে না
দ্য ডুড

29
প্রকৃতপক্ষে, কেবল যুক্ত করুন বাটন.টাইটেললবেল.নম্বার অফলাইনস = 0; এটি লাইনগুলি সীমাহীন করে তুলবে। এবং button.titleLabel.textAlignment = NSTextAlignmentLeft; আপনি যদি বাম ন্যায়সঙ্গত পাঠ্য চান তবে শিরোনামটি ডিফল্টরূপে কেন্দ্রিক।
RyJ

4
দ্রুতগতিতেbutton.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
রবার্ট

1
দ্রুত সমাধানের জন্য @ রবার্টকে ধন্যবাদ। এছাড়াও অনুমান ব্যবহার এবং বর্জন করতে পারি NSLineBreakMode, তাই মত: button.titleLabel?.lineBreakMode = .ByWordWrapping
mjswensen

145

নির্বাচিত উত্তরটি সঠিক তবে আপনি যদি ইন্টারফেস বিল্ডারে এই ধরণের কাজটি করতে পছন্দ করেন তবে আপনি এটি করতে পারেন:

মাংসখণ্ডের


58
এই উত্তরটি লেখার জন্য আমার 24 বছরের স্ব-স্বকে ধন্যবাদ, 28 বছর বয়সী স্ব from
অ্যাডাম ওয়েট

5
এবং ইন্টারফেস বিল্ডার শুধুমাত্র সেটআপ সঙ্গে থাকতে, এক সেট করা উচিত titleLabel.textAlignmentসঙ্গে Numberমান 1মধ্যে User Defined Runtime Attributedকরতে টেক্সট কেন্দ্রিক
AnthoPak

2
আমার 24 বছরের পুরানো স্ব থেকে আপনার 28 বছর বয়সী স্বকে ধন্যবাদ!
ড্যানিয়েল স্প্রিঞ্জার

59

আপনি যদি একাধিক লাইনের কেন্দ্রিক শিরোনাম সহ একটি বোতাম যুক্ত করতে চান তবে বোতামটির জন্য আপনার ইন্টারফেস বিল্ডারের সেটিংস সেট করুন:

[ এখানে]


আপনি কীভাবে এটি অর্জন করবেন তার একটি পাঠ্য বিবরণ যুক্ত করতে পারেন। একটি চিত্র দুর্দান্ত, তবে এটি অনুপলব্ধ হয়ে উঠলে আপনার উত্তর অকেজো হবে।
ররি ম্যাকক্রসন

1
@ ররিএমসিক্রসন হাই, আমি উপরে একটি চিত্র যুক্ত করেছি। আপনি এটি দেখতে পারেন? দয়া করে মনে রাখবেন, এক্সকোড 7 এখনও বগি তাই বোতাম শিরোনাম অদৃশ্য হয়ে যেতে পারে। তবে, একবার অ্যাপ্লিকেশন চালানোর পরে আপনি পছন্দসই ফলাফল পাবেন।
ব্যবহারকারী5440039

2
এটি আসলে এই থ্রেডের সেরা উত্তর। অবিলম্বে কাজ করে এবং আইবি কেন্দ্রিক পাঠ্য দেখায়। ধন্যবাদ!
রেইনকাস্ট

@ user5440039 দুর্দান্ত উত্তরের জন্য ধন্যবাদ। একটি পাঠ্য বিবরণ যোগ করার প্রয়োজন নেই।
ফ্যাটি

54

আইওএস 6 এর জন্য:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

যেমন

UILineBreakModeWordWrap and UITextAlignmentCenter

আইওএস on এর পরে অবচয় করা হয়েছে ..


ইনসাইড NSText.hমধ্যে Foundationকোন যোগ অসমর্থিত হয়েছে। এটি .0.০ থেকে পাওয়া যায় তবে অবনমিত হয় না।
অ্যালেক্স সিও

দ্রুত: button.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel?.textAlignment = NSTextAlignment.Center
jcity

30

রজার নোলানের পরামর্শ পুনরুদ্ধার করতে, তবে স্পষ্ট কোড সহ, এটি সাধারণ সমাধান:

button.titleLabel?.numberOfLines = 0


13

এক্সকোড 9.3 এ আপনি নীচের মতো স্টোরিবোর্ড ব্যবহার করে এটি করতে পারেন ,

এখানে চিত্র বর্ণনা লিখুন

আপনাকে বোতামের শিরোনাম পাঠ্যএলাইনমেন্টটি কেন্দ্রে স্থাপন করতে হবে

button.titleLabel?.textAlignment = .center

নীচের মতো নতুন লাইনের () n) দিয়ে আপনাকে শিরোনাম পাঠ্য সেট করার দরকার নেই,

button.setTitle("Good\nAnswer",for: .normal)

কেবল শিরোনাম সেট করুন,

button.setTitle("Good Answer",for: .normal)

ফলাফল এখানে,

এখানে চিত্র বর্ণনা লিখুন


myButton.titleLabel.textAlignment = NSTextAlignmentCenterবিবৃতিও দরকার।
Tounaobun

11

আরও অনেক সহজ উপায় আছে:

someButton.lineBreakMode = UILineBreakModeWordWrap;

(আইওএস 3 এবং তারপরে সম্পাদনা করুন :)

someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

4
UIButton.lineBreakMode 3.0 এ অবমাননা করা হয়েছিল, সুতরাং এটি এখন আর ভাল বিকল্প নয়।
ক্রিস্টোফার পিক্সলে

2
লাইনব্রেকমোড কেবলমাত্র ইউআইবাটন-এর সরাসরি সম্পত্তি হিসাবে হ্রাস করা হয়। আমাদের নির্দেশ দেওয়া হয়েছে "এর পরিবর্তে শিরোনামল্যাবের লাইনব্রেকমোড সম্পত্তিটি ব্যবহার করুন।" আমি সেই অনুযায়ী ভালেরির উত্তর সম্পাদনা করেছি। এটি এখনও একটি ভাল বিকল্প।
Wienke

11

অটোলেআউট দিয়ে আইওএস 7 এ বাম সারিবদ্ধ:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

9

মাল্টি-লাইন সক্ষম করার পরে আমার অটো-লেআউট নিয়ে একটি সমস্যা ছিল, ফলাফলটি এরকম ছিল: সুতরাং আমি যে বোতামটির উপর ভিত্তি করে যুক্ত করেছি সেটির আকারটি প্রভাব ফেলবে না (এই ক্ষেত্রে বিষয়বস্তুএডিজিনেটস ছিল (10, 10, 10, 10 ) কল করার পরে : আশা করি এটি আপনাকে সহায়তা করবে (দ্রুত 5.0):
এখানে চিত্র বর্ণনা লিখুন
titleLabel
ConstraintscontentEdgeInsets
makeMultiLineSupport()
এখানে চিত্র বর্ণনা লিখুন

extension UIButton {

    func makeMultiLineSupport() {
        guard let titleLabel = titleLabel else {
            return
        }
        titleLabel.numberOfLines = 0
        titleLabel.setContentHuggingPriority(.required, for: .vertical)
        titleLabel.setContentHuggingPriority(.required, for: .horizontal)
        addConstraints([
            .init(item: titleLabel,
                  attribute: .top,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .top,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.top),
            .init(item: titleLabel,
                  attribute: .bottom,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .bottom,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.bottom),
            .init(item: titleLabel,
                  attribute: .left,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .left,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.left),
            .init(item: titleLabel,
                  attribute: .right,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .right,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.right)
            ])
    }

}

দ্রুতগতিতে নিখুঁত 5 কাজ করে I ফান্ট সেন্টারটেক্সটইন বাটন () {প্রহরী যাক শিরোনাম লেবেল = শিরোনাম লেবেল {ফেরত দিন} শিরোনামলাবেল.টেক্সটএলাইনমেন্ট =। সেন্টার}
শেড টুড

ধন্যবাদ. এটি একটি ভাল সমাধান।
এচেলন

আমি সীমাবদ্ধতা যোগ করার প্রয়োজন নেই খুঁজে পেয়েছি, কেবল লাইনব্রাকমোড / টেক্সটএলাইনমেন্ট / নম্বর অফলাইন সেট হওয়ার পরে পাঠ্য সেট করুন। এবং শীর্ষ এবং নীচে ইনসেটের জন্য শিরোনামএডজিনসেটসও সেট করে।
বিল চ্যান

@ বিলচান দুর্ভাগ্যক্রমে এটি সব ক্ষেত্রে কার্যকর হয় না
আমির খোরসান্দি

7

প্রথমত, আপনার সচেতন হওয়া উচিত যে ইউআইবাটন এর মধ্যে ইতিমধ্যে একটি ইউআইএলবেল রয়েছে। আপনি এটি ব্যবহার করে সেট করতে পারেন –setTitle:forState:

আপনার উদাহরণের সাথে সমস্যাটি হ'ল ইউিলাবেলের numberOfLinesসম্পত্তি ১ এর ডিফল্ট মান ব্যতীত অন্য কোনও কিছুতে সেট করা দরকার You আপনার সম্পত্তিটিও পর্যালোচনা করা উচিত lineBreakMode


আমি শিরোনামের সম্পত্তি সম্পর্কে সচেতন, তবে যতদূর আমি বলতে পারি এটি একাধিক লাইন ব্যবহারের জন্য সেট করা অসম্ভব, তাই এই পদ্ধতির। যদি আমি ব্যাকগ্রাউন্ড ইমেজটি অক্ষম করি তবে আমার ইউআইএলবেল প্রদর্শিত হবে, যা আমার কাছে একটি স্মার্টভিউটোফ্রন্ট বা ইউআইবাটন নিজেই একটি বাগ প্রস্তাব দেয়।
ওয়ান হান্ট

4

যারা এক্সকোড 4 এর স্টোরিবোর্ড ব্যবহার করছেন, আপনি বোতামটি ক্লিক করতে পারেন এবং বৈশিষ্ট্য পরিদর্শকের অধীনে ডান দিকের ইউটিলিটিস ফলকটিতে আপনি লাইন ব্রেকের জন্য একটি বিকল্প দেখতে পাবেন। শব্দ মোড়ানো চয়ন করুন, এবং আপনি যেতে ভাল হওয়া উচিত।


4

এখানে উত্তরগুলি আপনাকে বলছে কীভাবে প্রোগ্রামিয়ালিভাবে মাল্টলাইন বোতাম শিরোনাম অর্জন করতে হয়।

আমি কেবল এটি যুক্ত করতে চেয়েছিলাম আপনি যদি স্টোরিবোর্ডগুলি ব্যবহার করছেন তবে আপনি একটি বোতাম শিরোনাম ক্ষেত্রে একটি নতুন লাইন জোর করতে [Ctrl + Enter] টাইপ করতে পারেন।

আছে HTH



3

ব্রিল্টের ইউআইবিবেল উপাধিটি ভাইবোন দৃষ্টিভঙ্গি হিসাবে রাখার ধারণাটি আমার কাছে খুব ভাল ধারণা বলে মনে হয় না। ইউআইবাটনের দৃষ্টিভঙ্গিটি না পেয়ে তার স্পর্শ ইভেন্টের কারণে আমি ইউআইএলবেলের সাথে মিথস্ক্রিয়াজনিত সমস্যা নিয়ে ভাবতে থাকি।

অন্যদিকে, ইউআইবাটনের একটি সংক্ষিপ্তসার হিসাবে একটি ইউআইএলবেল সহ, আমি স্পষ্টভাবে জেনে গেছি যে স্পর্শ ইভেন্টগুলি সর্বদা ইউআইএলবেলের তত্ত্বাবধানে প্রচারিত হবে।

আমি এই পন্থাটি গ্রহণ করেছি এবং ব্যাকগ্রাউন্ড ইমেজটিতে রিপোর্ট করা কোনও সমস্যা লক্ষ্য করিনি। আমি এই কোডটি -TitleRectForContentRect এ যুক্ত করেছি: একটি ইউআইবাটন সাবক্লাসের তবে কোডটি ইউআইবাটন সুপারভিউয়ের অঙ্কন রুটিনেও স্থাপন করা যেতে পারে, সেক্ষেত্রে আপনি নিজের সমস্ত রেফারেন্সটি ইউআইবটন এর ভেরিয়েবলের সাথে প্রতিস্থাপন করবেন।

#define TITLE_LABEL_TAG 1234

- (CGRect)titleRectForContentRect:(CGRect)rect
{   
    // define the desired title inset margins based on the whole rect and its padding
    UIEdgeInsets padding = [self titleEdgeInsets];
    CGRect titleRect = CGRectMake(rect.origin.x    + padding.left, 
                                  rect.origin.x    + padding.top, 
                                  rect.size.width  - (padding.right + padding.left), 
                                  rect.size.height - (padding.bottom + padding].top));

    // save the current title view appearance
    NSString *title = [self currentTitle];
    UIColor  *titleColor = [self currentTitleColor];
    UIColor  *titleShadowColor = [self currentTitleShadowColor];

    // we only want to add our custom label once; only 1st pass shall return nil
    UILabel  *titleLabel = (UILabel*)[self viewWithTag:TITLE_LABEL_TAG];


    if (!titleLabel) 
    {
        // no custom label found (1st pass), we will be creating & adding it as subview
        titleLabel = [[UILabel alloc] initWithFrame:titleRect];
        [titleLabel setTag:TITLE_LABEL_TAG];

        // make it multi-line
        [titleLabel setNumberOfLines:0];
        [titleLabel setLineBreakMode:UILineBreakModeWordWrap];

        // title appearance setup; be at will to modify
        [titleLabel setBackgroundColor:[UIColor clearColor]];
        [titleLabel setFont:[self font]];
        [titleLabel setShadowOffset:CGSizeMake(0, 1)];
        [titleLabel setTextAlignment:UITextAlignmentCenter];

        [self addSubview:titleLabel];
        [titleLabel release];
    }

    // finally, put our label in original title view's state
    [titleLabel setText:title];
    [titleLabel setTextColor:titleColor];
    [titleLabel setShadowColor:titleShadowColor];

    // and return empty rect so that the original title view is hidden
    return CGRectZero;
}

আমি সময় নিলাম এবং এই সম্পর্কে এখানে আরও কিছু লিখেছি । সেখানে, আমি একটি সংক্ষিপ্ত সমাধানও নির্দেশ করছি, যদিও এটি সমস্ত দৃশ্যের সাথে পুরোপুরি ফিট করে না এবং কিছু ব্যক্তিগত ভিউ হ্যাকিংয়ের সাথে জড়িত। এছাড়াও, আপনি ব্যবহারের জন্য প্রস্তুত একটি ইউআইবাটন সাবক্লাস ডাউনলোড করতে পারেন।


3

আপনি যদি আইওএস 6 এ অটো-লেআউট ব্যবহার করেন তবে আপনাকে preferredMaxLayoutWidthসম্পত্তি সেট করার দরকারও পড়তে পারে :

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width;

3

লাইনব্রেইকমোডকে এনএসলাইনব্রেইকবাইওয়ার্ড ওয়ার্যাপিং (আইবি বা কোডে হয়) এ সেট করা বোতামের লেবেলটিকে মাল্টলাইন করে তোলে, তবে বোতামের ফ্রেমকে প্রভাবিত করে না।

যদি বোতামটির গতিশীল শিরোনাম থাকে তবে একটি কৌশল আছে: লুকানো ইউিলাবেলকে একই ফন্টের সাহায্যে রাখুন এবং লেআউটের সাথে বোতামের উচ্চতার সাথে এটির উচ্চতা বেঁধে দিন; যখন পাঠ্য বোতামে সেট করুন এবং লেবেল এবং অটোলেআউট সমস্ত কাজ করবে।

বিঃদ্রঃ

এক-লাইন বোতামের অন্তর্নিহিত আকারের উচ্চতা লেবেলের চেয়ে বড়, সুতরাং লেবেলের উচ্চতা সঙ্কুচিত হওয়া রোধ করতে এটি উল্লম্ব বিষয়বস্তু আলিঙ্গন অগ্রাধিকার অবশ্যই বোতামের উল্লম্ব সামগ্রী সংক্ষেপণ প্রতিরোধের চেয়ে বেশি হওয়া উচিত।


3

ইন সুইফট 5.0 এবং Xcode 10.2

//UIButton extension
extension UIButton {
     //UIButton properties
     func btnMultipleLines() {
         titleLabel?.numberOfLines = 0
         titleLabel?.lineBreakMode = .byWordWrapping
         titleLabel?.textAlignment = .center        
     }
}

আপনার ভিউকন্ট্রোলারে এই জাতীয় কল

button.btnMultipleLines()//This is your button

2

এটি পুরোপুরি কাজ করে।

প্লিস্টের মতো কনফিগার ফাইল সহ এটি ব্যবহার করতে যুক্ত করুন, আপনাকে এই জাতীয় জাতীয় শিরোনাম লিখতে সিডিএটিএ ব্যবহার করতে হবে:

<string><![CDATA[Line1
Line2]]></string>

2

আপনি যদি অটো-লেআউট ব্যবহার করেন।

button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.numberOfLines = 2

2

দ্রুত 4.0

btn.titleLabel?.lineBreakMode = .byWordWrapping
btn.titleLabel?.textAlignment = .center
btn.setTitle( "Line1\nLine2", for: .normal)

2

আজকাল, যদি কেস-বাই-কেস ভিত্তিতে আপনার ইন্টারফেস বিল্ডারে অ্যাক্সেসযোগ্য হওয়ার জন্য সত্যিই এই ধরণের জিনিসটির প্রয়োজন হয় তবে আপনি এটিকে সাধারণ এক্সটেনশান দিয়ে এটি করতে পারেন:

extension UIButton {
    @IBInspectable var numberOfLines: Int {
        get { return titleLabel?.numberOfLines ?? 1 }
        set { titleLabel?.numberOfLines = newValue }
    }
}

তারপরে আপনি কেবল কোনও UIButton বা UIButton সাবক্লাসে একটি অ্যাট্রিবিউট হিসাবে নাম্বার অফলাইনগুলি সেট করতে পারেন যেন এটি কোনও লেবেল। এটি একই সাথে অন্যান্য সাধারণত-অ্যাক্সেসযোগ্য মানগুলির পুরো হোস্টের জন্য যায়, যেমন কোনও দৃশ্যের স্তরের কোণার ব্যাসার্ধ বা ছায়ার বৈশিষ্ট্য যা এটি ছায়া দেয়।


2

সুইফট 5, ইউআইবাটনে মাল্টি লাইন পাঠ্যের জন্য

  let button = UIButton()
  button.titleLabel?.lineBreakMode = .byWordWrapping
  button.titleLabel?.textAlignment = .center
  button.titleLabel?.numberOfLines = 0 // for Multi line text

0

আপনার নিজের বোতামের ক্লাসটি রোল করুন। এটি দীর্ঘকালীন সর্বোত্তম সমাধান solution ইউআইবাটন এবং অন্যান্য ইউআইকিট ক্লাসগুলি কীভাবে আপনি সেগুলি কাস্টমাইজ করতে পারেন তাতে খুব সীমাবদ্ধ।



0

আমি অন্তর্ভূক্ত jessecurry এর উত্তর মধ্যে STAButton যা আমার অংশ STAControls ওপেন সোর্স লাইব্রেরি। আমি বর্তমানে এটি তৈরি করছি এমন অ্যাপগুলির মধ্যে একটির মধ্যে আমি এটি ব্যবহার করি এবং এটি আমার প্রয়োজনের জন্য কাজ করে। কীভাবে এটি উন্নত করা যায় বা আমাকে টানার অনুরোধগুলি প্রেরণ করতে পারে সে বিষয়ে নির্দ্বিধায় দ্বিধা প্রকাশ করুন।


0

বোতামে শিরোনাম লেবেলের ব্যবধান ঠিক করতে শিরোনামএডজিনসেটস এবং অন্যান্য বৈশিষ্ট্যগুলি সেটটাইটেলের আগে সেট করুন:

    let set = UIButton()
    sut.titleLabel?.lineBreakMode = .byWordWrapping
    sut.titleLabel?.numberOfLines = 0
    sut.titleEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 20, right: 20)
    sut.setTitle("Dummy button with long long long long long long long long title", for: .normal)

PS আমি শিরোনাম লেবেল? .XtxtAlignment প্রয়োজন হয় না এবং শিরোনামটি প্রান্তিককরণ পরীক্ষা করে .natural


-4

যদিও এটি একটি নিয়ন্ত্রণে একটি সংক্ষিপ্তসার যুক্ত করা ঠিক আছে, এটি আসলে কাজ করবে তার কোনও গ্যারান্টি নেই, কারণ নিয়ন্ত্রণটি সম্ভবত এটির উপস্থিতি আশা করে না এবং এটি খারাপ আচরণ করতে পারে। আপনি যদি এটির সাথে দূরে সরে যেতে পারেন তবে কেবলমাত্র বোতামটির একটি ভাইবুল ভিউ হিসাবে লেবেলটি যুক্ত করুন এবং এর ফ্রেমটি সেট করুন যাতে এটি বোতামটি ওভারল্যাপ করে; যতক্ষণ না এটি বোতামের শীর্ষে উপস্থিত হতে থাকে ততক্ষণ বোতামটি কিছুই করতে পারে না এটি এটিকে অস্পষ্ট করবে।

অন্য কথায়:

[button.superview addSubview:myLabel];
myLabel.center = button.center;

2
দয়া করে, আপনি যদি এই ধরণের কুৎসিত পদ্ধতির পরামর্শ দেন তবে আপনার কোড উদাহরণে ভুল করবেন না :)। লেবেলের বোতামের মত একই কেন্দ্রটি হওয়া উচিত নয় যদি এটি একটি পূর্বরূপ হয়। MyLabel.frame = বাটন.বাউন্ড ব্যবহার করুন; বা myLabel.center = cgPointMake (বাটন.ফ্রেম.সাইজ.উইথ * 0.5, বাটন.ফ্রেম.সাইজ.হাইট * 0.5)
জাকুবকেজলিক

1
@ গ্রিজলি নেট আমি বিশেষভাবে পরামর্শ দিচ্ছি যে এটিকে বোতামের একটি সংক্ষিপ্তসার হিসাবে যুক্ত না করা। addSubview:এখানে এটি buttonএর তত্ত্বাবধানে যুক্ত করে, এটি এটিকে বোতামটি স্নেহ করে তোলে, তাই তাদের কেন্দ্রগুলির সাথে মিলে যাওয়া সঠিক।
ব্রেন্ট রয়েল-গর্ডন

আহ, আমার ভুল! আপনি ঠিক বলেছেন, আমি "ছোট" সত্যটি এটিকে তদারকিতে ফেলেছি: ডি ... দুঃখিত :)
জাকুবকেজলিক

এটি ঠিক যেমনটি জিজ্ঞাসা করা হয় তা নয়, কারণ এলিমেন্ট বোতামটির একটি শিরোনাম থাকায় এই সমাধানটি প্রশ্নটি বাস্তবায়নের জন্য একটি খারাপ উপায় হতে পারে।
পাবলো ব্লাঙ্কো

আইফোন ওএস ২.০ এ এটি ছিল যুক্তিসঙ্গত পরামর্শ। এখনই এটি করার আরও অনেক ভাল উপায় রয়েছে। : ^)
ব্রেন্ট রয়েল-গর্ডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.