প্যাডিং a UILabel
, সম্পূর্ণ দ্রবণ। 2020 এর জন্য আপডেট হয়েছে।
দেখা যাচ্ছে যে তিনটি জিনিস অবশ্যই করা উচিত।
১. নতুন ছোট আকারের সাথে পাঠ্যক্ষেত্রকে # ফরবেন্ড কল করতে হবে
২. নতুন নতুন আকারের সাথে অবশ্যই ড্রটেক্সটকে ওভাররাইড করতে হবে
৩. যদি গতিশীল আকারের কক্ষ হয় তবে অবশ্যই আন্তঃসংশ্লিষ্ট আকারটি সামঞ্জস্য করতে হবে
নীচের আদর্শ উদাহরণে, পাঠ্য ইউনিটটি একটি সারণী দর্শন, স্ট্যাক ভিউ বা অনুরূপ নির্মাণে রয়েছে, এটি এটিকে একটি নির্দিষ্ট প্রস্থ দেয় । উদাহরণস্বরূপ আমরা 60,20,20,24 এর প্যাডিং চাই।
সুতরাং, আমরা "বিদ্যমান" অন্তর্নিহিত কনসেন্টসাইজটি নিই এবং প্রকৃতপক্ষে উচ্চতায় 80 যোগ করি ।
পুনরাবৃত্তি করতে ...
আপনাকে ইঞ্জিন দ্বারা আক্ষরিকভাবে উচ্চতা গণনা করা "এখন অবধি" পেতে হবে এবং সেই মানটি পরিবর্তন করতে হবে।
আমি যে প্রক্রিয়া বিভ্রান্তিকর, কিন্তু, এটি যে এটি কাজ করে। আমার জন্য, অ্যাপলকে "প্রাথমিক উচ্চতার গণনা" এর মতো কিছু কল প্রকাশ করা উচিত।
দ্বিতীয়ত আমাদের আসলে নতুন নতুন আকারের সাথে পাঠ্যক্ষেত্রের # forbouts কলটি ব্যবহার করতে হবে ।
সুতরাং টেক্সটরেট # ফরবাউন্ডে আমরা প্রথমে আকার ছোট করি এবং তারপরে সুপারকে কল করি।
সতর্কতা! আপনি সুপার পরে কল করা উচিত , আগে না!
যদি আপনি এই পৃষ্ঠার সমস্ত প্রচেষ্টা এবং আলোচনাটি সাবধানতার সাথে তদন্ত করেন, তবে এটিই সঠিক সমস্যা। কিছু সমাধান লক্ষ্য করুন "প্রায় কাজ করা মনে হচ্ছে" তবে তারপরে কেউ রিপোর্ট করবেন যে নির্দিষ্ট পরিস্থিতিতে এটি কাজ করবে না। এটি প্রকৃতপক্ষে সঠিক কারণ - বিভ্রান্তিকরভাবে আপনাকে অবশ্যই "পরে সুপার বলা উচিত", আগে নয়।
সুতরাং, আপনি যদি সুপারটিকে "ভুল ক্রমে" বলে থাকেন তবে এটি সাধারণত কাজ করে তবে নির্দিষ্ট নির্দিষ্ট পাঠ্যের দৈর্ঘ্যের জন্য এটি কার্যকর হয় না ।
"ভুলভাবে প্রথমে সুপার করা" এর একটি চাক্ষুষ উদাহরণ এখানে রয়েছে:
60,20,20,24 মার্জিনটি সঠিক কিনা লক্ষ্য করুন তবে আকারের গণনাটি আসলে ভুল, কারণ এটি পাঠ্যক্ষেত্রের জন্য "সুপার ফার্স্ট" প্যাটার্ন দিয়ে সম্পন্ন হয়েছিল # ফরবাউন্ডস।
ফিক্সড:
লক্ষ্য করুন যে কেবলমাত্র পাঠ্য রেক্ট # ফরবাউন্ড ইঞ্জিনটি কীভাবে গণনাটি সঠিকভাবে করতে হয় তা জানে :
অবশেষে!
আবার, এই উদাহরণে ইউআইএলবেল সেই সাধারণ পরিস্থিতিতে ব্যবহার করা হচ্ছে যেখানে প্রস্থটি স্থির করা আছে। সুতরাং অন্তর্নিবিজ্ঞান আকারে আমাদের সামগ্রিক অতিরিক্ত উচ্চতা আমরা চাই "যুক্ত" করতে। (আপনার কোনও প্রস্থে "যুক্ত" করার দরকার নেই, এটি নির্ধারিত হওয়ার সাথে সাথে এটি অর্থহীন হবে))
তারপরে টেক্সটরেট # ফরবাউন্ডে আপনি অটোলেআউট দ্বারা "এখন পর্যন্ত প্রস্তাবিত" সীমাগুলি পেয়ে যান, আপনি আপনার মার্জিনগুলি বিয়োগ করেন , এবং কেবল তখনই আবার পাঠ্য রেক্ট # ফরবাউন্ড ইঞ্জিনে কল করুন, এটি সুপারিতে বলা হবে, যা আপনাকে ফলাফল দেবে।
অবশেষে এবং সরলভাবে অঙ্কনের ক্ষেত্রে অবশ্যই আপনি সেই একই ছোট বাক্সে আঁকুন।
রাম রাম!
let UIEI = UIEdgeInsets(top: 60, left: 20, bottom: 20, right: 24) // as desired
override var intrinsicContentSize:CGSize {
numberOfLines = 0 // don't forget!
var s = super.intrinsicContentSize
s.height = s.height + UIEI.top + UIEI.bottom
s.width = s.width + UIEI.left + UIEI.right
return s
}
override func drawText(in rect:CGRect) {
let r = rect.inset(by: UIEI)
super.drawText(in: r)
}
override func textRect(forBounds bounds:CGRect,
limitedToNumberOfLines n:Int) -> CGRect {
let b = bounds
let tr = b.inset(by: UIEI)
let ctr = super.textRect(forBounds: tr, limitedToNumberOfLines: 0)
// that line of code MUST be LAST in this function, NOT first
return ctr
}
আরেকবার. মনে রাখবেন যে এই এবং অন্যান্য QA এর উত্তর যা "প্রায়" সঠিক, উপরের প্রথম চিত্রটিতে সমস্যাটি ভোগ করে - "সুপারটি ভুল জায়গায় রয়েছে" । আপনাকে অবশ্যই আকারটিকে আন্তঃসংশ্লিষ্ট আকারে আরও বড় করতে হবে এবং তারপরে টেক্সটরেটে # ফরবাউন্ডে আপনাকে অবশ্যই প্রথম প্রস্তাবের সীমানা সঙ্কুচিত করতে হবে এবং তারপরে সুপার কল।
সংক্ষিপ্তসার: আপনার অবশ্যই "সুপারকে শেষ কল করুন পাঠ্যক্ষেত্রের জন্য # বাউন্ডগুলিতে "
এটাই রহস্য।
নোট করুন যে আপনার অতিরিক্ত অকার্যকর, সাইজথ্যাটফিটস, প্রয়োজনলয়আউট বা অন্য কোনও জোর করে কল করার প্রয়োজন নেই এবং প্রয়োজনও নেই। একটি সাধারণ সমাধান স্বাভাবিক অটোলেআউট অঙ্কন চক্রটিতে সঠিকভাবে কাজ করা উচিত।
টিপ:
আপনি যদি মনোস্পেস ফন্টগুলির সাথে কাজ করছেন তবে এখানে একটি দুর্দান্ত টিপ: https://stackoverflow.com/a/59813420/294884