ইউআইবাটন ফন্টের আকার প্রস্থে সামঞ্জস্য করুন


122

আমার কাছে নিম্নলিখিত কোড রয়েছে:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, 25, 25);

[[button layer] setCornerRadius:5.0f];
[[button layer] setMasksToBounds:YES];
[[button layer] setBackgroundColor:[[UIColor redColor] CGColor]];
[button.titleLabel setFrame:CGRectMake(0,0, 25, 25)];

[button setTitle:[NSString stringWithFormat:@"%@", [[topics objectAtIndex:indexPath.row] unread]] forState:UIControlStateNormal];

সমস্যাটি হ'ল পাঠ্যের স্ট্রিংটি দীর্ঘ না হলে এটি সূক্ষ্ম (1-2 অঙ্ক) প্রদর্শন করে। যাইহোক, যখন এটি বেশ দীর্ঘ হয় (3 ++ ডিজিট), আমি দেখতে পাচ্ছি সমস্তগুলি একটি লাল বোতাম, যার ভিতরে কোনও পাঠ্য নেই। আমি এটি কীভাবে সামঞ্জস্য করব?

আমি এটা মনে করি না:

[button.titleLabel setAdjustsFontSizeToFitWidth:YES];

কাজ আছে, তাই না?


এটির কাজ করা উচিত, বা theLabel.adjustsFontSizeToFitWidth = YES।
লুক

এটা তোলে করে কাজ করেtitleButton.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
onmyway133

উত্তর:


291

এটা চেষ্টা কর:

button.titleLabel.numberOfLines = 1;
button.titleLabel.adjustsFontSizeToFitWidth = YES;
button.titleLabel.lineBreakMode = NSLineBreakByClipping; //<-- MAGIC LINE

আমি নিশ্চিত না কেন এটি কৌশলটি করে তবে এটি করে :)


1
ধন্যবাদ, যেখানে বাটন.টাইটেললবেল.লাইনবরাকমোড = ইউআইলাইনব্রেইকমোডক্লিপ; <- ম্যাজিক লাইন এখন অবচয় করা হয়েছে
ইউনূস

8
@ ইউনাস ইউআইলাইনব্র্যাকমোডক্লিপটি এনএসলাইনব্র্যাকবাইক্র্লিপিংয়ের সাথে প্রতিস্থাপন করুন
কোডেরিপি

1
এনভিএম, এটি কেবল এটিকে numberOfLines0
মার্টি

34
button.titleLabel.adjustsFontSizeToFitWidth = YES;

আপনি যদি অটো-লেআউট ব্যবহার করছেন এবং বোতামটির প্রস্থে একটি সীমাবদ্ধতা সেট করে থাকেন তবে কাজটি নিজেই করা উচিত ।

অন্যান্য বিকল্পগুলি (ন্যূনতম স্কেল ফ্যাক্টর, লাইনের সংখ্যা ইত্যাদি) এখনও আপনার প্রয়োজন অনুসারে আরও কাস্টমাইজ করতে ব্যবহার করা যেতে পারে, তবে প্রয়োজন হয় না।


15

এলি বুডের উত্তর আইওএস-তে কাজ করে না 8 আমি একটি সমাধান পেয়েছি যা আইওএস-এ কাজ করে 8.. নীচে একটি সুইফ্ট কোড রয়েছে:

let label = self.button?.titleLabel
label?.minimumScaleFactor = 0.01
label?.adjustsFontSizeToFitWidth = true
label?.font = UIFont.systemFontOfSize(100)

আপনি লেবেল? .LineBreakMode দিয়ে খেলতে পারেন যেহেতু আমি দেখতে পেয়েছি ফলাফলগুলি বিভিন্ন ব্রেক মোডের জন্য পরিবর্তিত হয়।


.adjustsFontSizeToFitWidth = সত্য - আমি এনএসটিেক্সটফিল্ড এবং একটি আকার পরিবর্তনযোগ্য উইন্ডো দিয়ে কীভাবে একই কাজ করতে পারি?
লিও ডাবাস

এটি আমার কাছে এটিকে Xcode IB ব্যবহার করে লেবেল নির্বাচন করে নূন্যতম ফন্ট স্কেলটি 0.01 এ সেট করার মতো বলে মনে হয়
লিও ডাবাস

এনএসটিেক্সটফিল্ড ব্যবহার করার সময় অটোশ্রিঙ্ক বিকল্প নেই
লিও ডাবাস

ইউআইটিেক্সটফিল্ডের কাছে পাঠ্য স্বয়ংক্রিয়ভাবে সঙ্কুচিত করার বিকল্প রয়েছে, যেখানে এনএসটিেক্সটফিল্ড নেই। সুতরাং আমি মনে করি আপনার পাঠ্য ক্ষেত্রের প্রস্থের মাপসই করতে ম্যানুয়ালি ফন্টের প্রয়োজন।
আলেকজান্ডার বেলিয়াভস্কি

10

সর্বশেষ দ্রুততম এ আমার জন্য কাজ করে বলে মনে হচ্ছে

button.titleLabel!.numberOfLines = 1
button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByClipping

10

অন্যান্য উত্তরের উপর ভিত্তি করে আইওএস 10.3 সমাধান এখানে:

    button.titleLabel!.numberOfLines = 1
    button.titleLabel!.adjustsFontSizeToFitWidth = true
    button.titleLabel!.baselineAdjustment = .alignCenters

baselineAdjustmentএখনও কেউ উল্লেখ করেনি; আমার এটি দরকার ছিল কারণ adjustsFontSizeToFitWidthকার্যকর হওয়ার পরে বোতামের লেবেলটি উল্লম্বভাবে বিভ্রান্ত হয় । অ্যাপলের baselineAdjustmentডকুমেন্টেশন:

যদি adjustsFontSizeToFitWidthসম্পত্তি সেট করা থাকে true, এই সম্পত্তি যেখানে ফন্টের আকারের সামঞ্জস্যতা প্রয়োজন সেখানে পাঠ্য বেসলাইনের আচরণ নিয়ন্ত্রণ করে। এই সম্পত্তিটির ডিফল্ট মান alignBaselines। সম্পত্তিটি numberOfLinesসেট করা থাকলেই এই সম্পত্তি কার্যকর হয় 1


এফডাব্লুআইডাব্লু, আমি কখনই লেবেলটি পুরোপুরি প্রান্তিকভাবে পেলাম না।


8

adjustsFontSizeToFitWidth আমি ইন্টারফেস বিল্ডারে আমার বোতামে প্রস্থের সীমাবদ্ধ না করা পর্যন্ত আমার পক্ষে কাজ করছিল না।

সীমাবদ্ধতা স্থির করে বোতামটি আকারে বাড়তে রোধ করেছিল এবং তাই এটি বুঝতে না পেরে এটি পাঠ্য সঙ্কুচিত হয়েছে।


8

সুইফট 4 এক্সটেনশন

extension UIButton {
    @IBInspectable var adjustFontSizeToWidth: Bool {
        get {
            return self.titleLabel?.adjustsFontSizeToFitWidth
        }
        set {
            self.titleLabel?.numberOfLines = 1
            self.titleLabel?.adjustsFontSizeToFitWidth = newValue;
            self.titleLabel?.lineBreakMode = .byClipping;
            self.titleLabel?.baselineAdjustment = .alignCenters 
        }
    }
}

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


আপনি কি জন্য ট্যাগ ব্যবহার করবেন?
জাপোরোজচেনকো ওলেকসান্দ্র


দয়া করে আপনি কী বোঝাতে চেয়েছেন আপনি আরও গভীরভাবে বর্ণনা করতে পারেন?
জাপোরোজচেনকো ওলেকসান্দ্র

সামঞ্জস্য সক্ষম থাকলে তা নির্ধারণ করতে আমি পতাকাটির মতো ট্যাগ ব্যবহার করি।
নিক কোভ

কেন আপনি কেবল সেলফ.টাইটেল লেবেল ব্যবহার করবেন না? তোমার কি অতিরিক্ত জিনিস দরকার?
জাপোরোজচেনকো ওলেকসান্ডার

3

Xamarin.iOS সমাধান

var accountButton = new UIButton();
accountButton.SetTitle("Account", UIControlState.Normal);            
accountButton.TitleLabel.AdjustsFontSizeToFitWidth = true;
accountButton.TitleLabel.Lines = 1;
accountButton.TitleLabel.LineBreakMode = UILineBreakMode.Clip;
accountButton.TitleLabel.Font = accountButton.TitleLabel.Font.WithSize(35);

সিস্টেমটি আকারের সাথে মানানসই করার আগে হরফটি "বড়" হয়েছিল তা নিশ্চিত করতে আমি ফন্টের আকার নির্ধারণ করেছি।


3

নিক কোভের উত্তরের ভিত্তিতে:

import UIKit


    extension UIButton {
        @IBInspectable var adjustFontSizeToWidth: Bool {
            get {
                return titleLabel!.adjustsFontSizeToFitWidth
            }
            set {
                titleLabel!.adjustsFontSizeToFitWidth = newValue
                titleLabel!.lineBreakMode             = .byClipping
            }
        }
    }

এটি কাজ করে, তবে ফন্টের আকারটি হ্রাস পাচ্ছে 17 থেকে 12 এর মতো, যখন স্ট্রিং বড় হবে তখন শিরোনামের প্রস্থকে বাড়ানোর কোনও উপায় আছে কি?
আর মোহন

@ আর.মোহান নিশ্চিত, তবে এটি নির্দিষ্ট প্রস্থ সম্পর্কে। কেবল সীমাবদ্ধতাগুলি স্থির করা হয়নি, এবং এটি বাড়বে। শীর্ষস্থানীয় / অনুসরণকারী উভয়ই সেট করবেন না বা তাদের মধ্যে একটিও তৈরি করুন না> =
জাপোরোজচেনকো ওলেকসান্দার

0

নীচের সমাধানটি আমার জন্য কাজ করেছে:

button.titleLabel?.adjustsFontForContentSizeCategory = true

বিকাশকারী ডকুমেন্টেশন এই সম্পত্তিটিকে এভাবে ব্যাখ্যা করে:

একটি বুলিয়ান মান এটি নির্দেশ করে যে ডিভাইসের সামগ্রীর আকারের বিভাগটি পরিবর্তিত হলে বস্তুটি স্বয়ংক্রিয়ভাবে তার ফন্ট আপডেট করে কিনা।


0

আইওএস 13.1 এ সুইফট 5 এর সাথে, contentEdgeInsetsপ্যাডিংগুলি সামঞ্জস্য করতে আমাকেও সরবরাহ করতে হয়েছিল ।

extension UIButton {
    @IBInspectable var adjustFontSizeToWidth: Bool {
        get {
            return self.titleLabel?.adjustsFontSizeToFitWidth ?? false
        }
        set {
            self.titleLabel?.numberOfLines = 1
            self.titleLabel?.adjustsFontSizeToFitWidth = newValue;
            self.titleLabel?.lineBreakMode = .byClipping;
            self.titleLabel?.baselineAdjustment = .alignCenters
            self.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.