मुझे भी यही समस्या थी। बाकी सभी लोगों को धन्यवाद जिन्होंने उत्तर दिया - मैं इनमें से कई उत्तरों के कुछ हिस्सों का उपयोग करके एक समाधान प्राप्त करने में सक्षम था।
मेरा समाधान 5 स्विफ्ट का उपयोग कर रहा है
हम जिस समस्या को हल करने का प्रयास कर रहे हैं, वह यह है कि हमारे पास अलग-अलग पहलू अनुपात वाली छवियां हो सकती हैं, TableViewCell
लेकिन हम चाहते हैं कि वे विभिन्न प्रकारों के साथ प्रस्तुत करें। बेशक, चित्रों को बिना किसी विकृति के प्रस्तुत करना चाहिए और पूरे स्थान को भरना चाहिए। मेरे मामले में, मैं लंबी, पतली छवियों के कुछ "क्रॉपिंग" के साथ ठीक था, इसलिए मैंने सामग्री मोड का उपयोग किया.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
छवि को केंद्रित किया जाएगा।