আমারও একই সমস্যা ছিল। যারা উত্তর দিয়েছেন তাদের প্রত্যেককে ধন্যবাদ - আমি এই উত্তরের বেশ কয়েকটি অংশ ব্যবহার করে একসাথে একটি সমাধান পেতে সক্ষম হয়েছি।
আমার সমাধানটি সুইফট 5 ব্যবহার করছে
আমরা যে সমস্যাটি সমাধান করার চেষ্টা করছি তা হ'ল আমাদের মধ্যে বিভিন্ন দিক অনুপাত সহ চিত্র থাকতে পারে TableViewCell
তবে আমরা সেগুলি সুসংগত প্রস্থের সাথে রেন্ডার করতে চাই। চিত্রগুলি অবশ্যই কোনও বিকৃতি না দিয়ে পুরো স্থানটি পূরণ করা উচিত fill আমার ক্ষেত্রে, লম্বা, চর্মসার চিত্রগুলির কিছু "ক্রপিং" দিয়ে আমি ভাল ছিলাম, তাই আমি সামগ্রী মোডটি ব্যবহার করেছি.scaleAspectFill
এটি করার জন্য, আমি একটি কাস্টম সাবক্লাস তৈরি করেছি UITableViewCell
। আমার ক্ষেত্রে, আমি এটি নামকরণ করেছিStoryTableViewCell
। সম্পূর্ণ শ্রেণিটি নীচে আটকানো হয়েছে, কমেন্টস ইনলাইন সহ।
একটি কাস্টম অ্যাকসেসরির ভিউ এবং দীর্ঘ পাঠ্য লেবেল ব্যবহার করার সময়ও এই পদ্ধতিটি আমার পক্ষে কাজ করেছিল। এখানে চূড়ান্ত ফলাফলের একটি চিত্র:
ধারাবাহিক চিত্রের প্রস্থ সহ সারণী প্রদর্শন রেন্ডার করা
class StoryTableViewCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
// ==== Step 1 ====
// ensure we have an image
guard let imageView = self.imageView else {return}
// create a variable for the desired image width
let desiredWidth:CGFloat = 70;
// get the width of the image currently rendered in the cell
let currentImageWidth = imageView.frame.size.width;
// grab the width of the entire cell's contents, to be used later
let contentWidth = self.contentView.bounds.width
// ==== Step 2 ====
// only update the image's width if the current image width isn't what we want it to be
if (currentImageWidth != desiredWidth) {
//calculate the difference in width
let widthDifference = currentImageWidth - desiredWidth;
// ==== Step 3 ====
// Update the image's frame,
// maintaining it's original x and y values, but with a new width
self.imageView?.frame = CGRect(imageView.frame.origin.x,
imageView.frame.origin.y,
desiredWidth,
imageView.frame.size.height);
// ==== Step 4 ====
// If there is a texst label, we want to move it's x position to
// ensure it isn't overlapping with the image, and that it has proper spacing with the image
if let textLabel = self.textLabel
{
let originalFrame = self.textLabel?.frame
// the new X position for the label is just the original position,
// minus the difference in the image's width
let newX = textLabel.frame.origin.x - widthDifference
self.textLabel?.frame = CGRect(newX,
textLabel.frame.origin.y,
contentWidth - newX,
textLabel.frame.size.height);
print("textLabel info: Original =\(originalFrame!)", "updated=\(self.textLabel!.frame)")
}
// ==== Step 4 ====
// If there is a detail text label, do the same as step 3
if let detailTextLabel = self.detailTextLabel {
let originalFrame = self.detailTextLabel?.frame
let newX = detailTextLabel.frame.origin.x-widthDifference
self.detailTextLabel?.frame = CGRect(x: newX,
y: detailTextLabel.frame.origin.y,
width: contentWidth - newX,
height: detailTextLabel.frame.size.height);
print("detailLabel info: Original =\(originalFrame!)", "updated=\(self.detailTextLabel!.frame)")
}
// ==== Step 5 ====
// Set the image's content modoe to scaleAspectFill so it takes up the entire view, but doesn't get distorted
self.imageView?.contentMode = .scaleAspectFill;
}
}
}
self.imageView.bounds
তবে চিত্রটি কেন্দ্রিক হবে।