আমি একাধিক অনুচ্ছেদে পাঠ্য সহ টেবিলভিউ সেলগুলি পাওয়ার চেষ্টা করছিলাম। গুণিত স্ট্রিংগুলি অনুচ্ছেদের মধ্যে অতিরিক্ত স্থান পাওয়ার একটি উপায় বলে মনে হয়েছিল (স্ট্রিংয়ে দুটি লাইন-ফিড করার চেয়ে কিছুটা ভাল লাগছে)। এটি এবং অন্যান্য পোস্টগুলি জুড়ে এসে যখন আমি আবিষ্কার করেছি যে আপনি যখন ঘরে বিভিন্ন পাঠ্য রাখতে চান তখন আইবি সেটিংস রান সময় প্রয়োগ হয় না।
আমি যে প্রধান জিনিসটি সামনে এলাম তা হ'ল স্ট্রিংয়ের একটি এক্সটেনশন যুক্ত করা (স্যুইফ্ট ব্যবহার করে) নির্দিষ্ট বৈশিষ্ট্যযুক্ত একটি বিশিষ্ট স্ট্রিং তৈরি করতে। উদাহরণ এখানে মার্কার ফল্ট ফন্ট ব্যবহার করে, কারণ এটি হেলভেটিকা থেকে সহজেই পৃথক। উদাহরণটি একে অপরের থেকে আরও স্বতন্ত্র করার জন্য অনুচ্ছেদের মধ্যে কিছুটা অতিরিক্ত ফাঁক দেখায়।
extension String {
func toMarkerFelt() -> NSAttributedString {
var style = NSMutableParagraphStyle()
style.paragraphSpacing = 5.0
let markerFontAttributes : [NSObject : AnyObject]? = [
NSFontAttributeName : UIFont(name: "Marker Felt", size: 14.0)!,
NSParagraphStyleAttributeName: style,
NSForegroundColorAttributeName : UIColor.blackColor()
]
let s = NSAttributedString(string: self, attributes: markerFontAttributes)
return s
}
}
তারপরে, আমার কাস্টম টেবিলভিউসেল-তে আপনি এটি আপনার পাঠ্য পাঠাতে চান এবং এটি এটি ইউআইএলবেলের একটি বিশিষ্ট স্ট্রিংতে রূপান্তর করে।
class MarkerFeltCell: UITableViewCell {
@IBOutlet weak var myLabel: UILabel!
func configureCellWithString(inputString : String) {
myLabel.attributedText = inputString.toMarkerFelt()
}}
টেবিলভিউ সহ ভিউ কন্ট্রোলারে আপনার ভিউডিডডলড () তে আপনার ঘরটি নিবন্ধভুক্ত করা উচিত - আমি একটি নিব ব্যবহার করেছি, সুতরাং এরকম কিছু:
let cellName = "MarkerFeltCell"
tableView.registerNib(UINib(nibName: cellName, bundle: nil), forCellReuseIdentifier: cellName)
কক্ষটি কত লম্বা হওয়া উচিত তা নির্ধারণের জন্য, একটি প্রোটোটাইপ ঘর তৈরি করুন যা আকারের তথ্য পাওয়ার জন্য ব্যবহৃত হয়, এবং টেবিলভিউতে কখনও যুক্ত হয় না। সুতরাং, আপনার দৃষ্টিতে কন্ট্রোলারের ভেরিয়েবলগুলি:
var prototypeSummaryCell : MarkerFeltCell? = nil
তারপরে (সম্ভবত ওভাররাইড - আপনার দৃশ্যের নিয়ামকের উপর নির্ভর করে) উচ্চতার জন্যরোআউটআইডেক্সপথ:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if xib == "MarkerFeltCell" {
if prototypeCell == nil {
prototypeCell = tableView.dequeueReusableCellWithIdentifier(xib) as? MarkerFeltCell
}
let width : CGFloat = tableView.bounds.width
let height : CGFloat = prototypeCell!.bounds.height
prototypeCell?.bounds = CGRect(x: 0, y: 0, width: width, height: height)
configureCell(prototypeCell!, atIndexPath: indexPath)
prototypeSummaryCell?.layoutIfNeeded()
let size = prototypeSummaryCell!.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
let nextHeight : CGFloat = ceil(size.height + 1.0)
return nextHeight
} else {
উপরের কোডে, প্রোটোটাইপসেলটি প্রথমবারের জন্য প্রয়োজনীয় হবে। প্রোটোটাইপসেলটি অটোসাইজিং প্রক্রিয়াটি পেরিয়ে যাওয়ার পরে সেলটির উচ্চতা নির্ধারণ করতে ব্যবহৃত হয়। সিল () ফাংশনটি দিয়ে আপনাকে উচ্চতাটি গোল করতে হবে। আমি কিছু অতিরিক্ত fudge ফ্যাক্টর যুক্ত।
চূড়ান্ত কোড বিট হ'ল আপনি কীভাবে ঘরের জন্য পাঠ্যটি কনফিগার করেন। এই উদাহরণের জন্য, সহজভাবে:
func configureCell(cell :UITableViewCell, atIndexPath indexPath: NSIndexPath) {
if let realCell = cell as? MarkerFeltCell {
realCell.configureCellWithString("Multi-line string.\nLine 2.\nLine 3.")
}
}
এছাড়াও, এখানে নিব একটি শট আছে। ঘরটির প্রান্তগুলিতে লেবেলটি পিন করা হয়েছে (মার্জিন পছন্দসই সহ), তবে নীচে সীমাবদ্ধতার জন্য "প্রয়োজনীয়" এর চেয়ে কম অগ্রাধিকার সহ "গ্রেটার থান বা সমান" সীমাবদ্ধতা ব্যবহার করেছেন।
লেবেলের ফন্টটি অ্যাট্রিবিউটে সেট করুন। আসল আইবি হরফ কিছু যায় আসে না।
এই ক্ষেত্রে ফলাফল: