কোনও ইউআইএলবেলের সর্বনিম্ন স্কেলফ্যাক্টর কীভাবে কাজ করে?


109

আমি minimumFontSizeআগে ব্যবহার করেছি কিন্তু সেই ফাংশনটি এখন অবহেলা করা হয়েছে এবং আমি কীভাবে minimumScaleFactorকাজ করে তা বেশ বুঝতে পারি না ।

আমি সর্বোচ্চ ফন্টের আকার 10 এবং সর্বনিম্ন 7 হতে চাই।

স্কেল ফ্যাক্টর সহ আমি কীভাবে পুনরায় আকার ফন্টের আকার 7 এ অর্জন করতে পারি?

UILabel সৃষ্টি:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

উত্তর:


204

আপনি সেট করতে হবে label.adjustsFontSizeToFitWidth = YES;


1
নিখুঁত, এটি আমার নিজের কোডে আমি অনুপস্থিত ছিল। ধন্যবাদ: ডি
ফোগমিস্টার

14
দ্রষ্টব্য: "অ্যাপলের ডকুমেন্টেশন বলছে ন্যূনতমস্কেলফ্যাক্টরটি কেবল তখনই কাজ করে যদি সংখ্যা অফফ্লাইনগুলি 1 তে সেট করা থাকে তবে 0 বা 1 এর চেয়ে বেশি কিছু ব্যবহার করা কার্যকর হবে না।" । ধন্যবাদ সানকে
samthui7

অসাধারণ! মজার বিষয় হচ্ছে আপনি যদি XIB এ মিনিমামস্কেলফ্যাক্টর সেট করেন তবে আপনাকে ফন্টসাইজটোফিটউইডথ অ্যাডজাস্টগুলি সেট করার দরকার নেই, তবে কোডটি করার সময় আপনার প্রয়োজন।
পলিটটা

104

অন্যান্য উত্তরগুলি যা বলে তা ছাড়াও, আপনি যদি মিনিসাইজ / ডিফল্টসাইজ (বিভাগ) হিসাবে রাখেন তবে minimumScaleFactorএটি পুরানো ব্যবহারের মতোই হবে minimumFontSize

উদাহরণস্বরূপ, আপনি যদি ডিফল্ট লেবেল আকার ব্যবহার করে সর্বনিম্ন ফন্টের আকার 10 হতে চান তবে আপনি এটি করতে পারেন:

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

( [UIFont labelFontSize]যদি এটির ডিফল্ট না হয় তবে আপনার লেবেলের ফন্টের আকারটি প্রতিস্থাপন করুন )।

যা একই হিসাবে হবে: [label setMinimumFontSize:10.0];


বিভাগটি সিজিফ্লোট হিসাবে কাস্ট করা উচিত, অন্যথায় এটি কাজ করবে না
উদ্বিগ্ন

@ ডওয়ারি 10 / লেবেলসাইজ করার ফলে 0 বা 10.0 বা 10.f এর কাটা সংখ্যার পূর্ণসংখ্যার মানটি শেষ হতে পারে, সুস্পষ্টভাবে ingালাই ছাড়াই fine
ক্লে

আপনি ঠিক আছেন, এটি কাজ করা উচিত। কোন কোডে এটি আমার পক্ষে কার্যকর হয়নি তা আমি মনে করতে পারি না, সম্ভবত এটি f বা বিন্দুটি অনুপস্থিত ছিল।
শয়তান

20

ডকুমেন্টেশন অনুযায়ী :

লেবেলের পাঠ্য প্রদর্শন করার সময় ব্যবহার করার জন্য একটি গ্রহণযোগ্য ফন্ট আকার দেয় এমন বর্তমান ফন্ট আকারের জন্য ক্ষুদ্রতম গুণক নির্দিষ্ট করতে এই সম্পত্তিটি ব্যবহার করুন। আপনি যদি এই সম্পত্তিটির জন্য 0 এর মান নির্দিষ্ট করেন তবে বর্তমান হরফ আকারটি হ'ল ক্ষুদ্রতম ফন্ট আকার হিসাবে ব্যবহৃত হয়।

সুতরাং যদি আপনার লেবেলের জন্য ডিফল্ট ফন্টের আকার হয় তবে 10আপনি এটি 0.7fহিসাবে রেখেছেন minimumScaleFactorএবং এটি একই কাজ করা উচিত minimumFontSize


আমি যা ভেবেছিলাম তাও; এমনকি আমি 0.1f হিসাবে রাখার পরেও, পাঠ্যটি আকারটি সামঞ্জস্য করে না। আমি ইউইলবেল কোড যুক্ত করব।
প্যাডিন 215

আপনি যদি সীমাবদ্ধতাগুলি সরিয়ে ফেলেন এবং কেবলমাত্র লেবেলের ফ্রেম সঙ্কুচিত করবেন?
কোপ্পাস

9
লগ 139: আপনার নম্বরটি অফলাইন সেট করা আছে? অ্যাপলের ডকুমেন্টেশন বলছে ন্যূনতমস্কেলফ্যাক্টরটি কেবল তখনই কাজ করে যদি সংখ্যা অফফ্লাইনগুলি 1 তে সেট করা থাকে তবে 0 বা 1 এর চেয়ে বড় কিছু ব্যবহার করা কার্যকর হবে না।
শানকে

1
@ সাননেকে এটি কাজ করবে এমনকি যদি সংখ্যাটি অফলাইন 1 টিরও বেশি সেট করা থাকে তবে 0 নয়
আসাদুল্লাহ আলী

12

অন্যান্য উত্তরের পাশাপাশি, আমি একটি প্রাথমিকভাবে বান্ধব ব্যাখ্যা যুক্ত করতে যাচ্ছি যা আমাকে সাহায্য করেছিল:

কীভাবে গণনা করা যায় a minimumScaleFactor ? আপনার লেবেলের নূন্যতম ফন্টের আকারটি আপনার লেবেলের ডিফল্ট ফন্টের আকার দ্বারা ভাগ করুন। উদাহরণস্বরূপ, আপনার ডিফল্ট ফন্টের আকার 25 Your আপনার সর্বনিম্ন ফন্টের আকার 10 10

10/25 = 0.4

0.4 আপনার minimumScaleFactorমান। উপরে @ জাসডোজার্সের উত্তরও দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.