/ / डायनामिक हाइट टेबल सेल के साथ ऑटोलॉययट और यूटेबलऑटोमैटिक डिमेंशन (डायनेमिक यूआईबेल + कई यूआईमैज व्यू) - आईओएस, ऑब्जेक्टिव-सी, आईफोन, यूटेब्यूव्यू, ऑटोलैयूट

ऑटोलायआउट और UITableAutomaticDimension (गतिशील UILabel + कई UIImageViews) के साथ गतिशील ऊँचाई तालिका कक्ष - आईओएस, उद्देश्य-सी, आईफोन, uitableview, autolayout

मैंने 3 दिनों के लिए डायनेमिक टेबल सेल और ऑटो लेआउट से संबंधित लेखों को देखा और अब तक काम नहीं किया।

नीचे टेबल सेल है जो मैं चाहता था। यहाँ मुख्य मुद्दा पोस्ट टेक्स्ट और UIImages के लिए UILabel है।

यहां छवि विवरण दर्ज करें

यहाँ UI तत्वों का पदानुक्रम है।

- Content View
+ ...
+ UILabel for text - dynamic height
+ UIView - image view container
* UIImageView
* UIImageView
* ....

लेबल में लाइन ब्रेक मोड रैप टेक्स्ट और लाइनें सेट हैं0 से। लेबल और कंटेनर दृश्य में ऊपर, नीचे, अग्रणी और अनुगामी के लिए बाधाएँ हैं। ImageViews रनटाइम में जोड़े जाते हैं और इसमें शीर्ष, अग्रणी, अनुगामी, नीचे और ऊंचाई की बाधाओं के लिए बाधा होती है। प्रथम छवि दृश्य में कंटेनर दृश्य में शीर्ष बाधा होती है और अंतिम छवि दृश्य में कंटेनर दृश्य में निचला अवरोध होता है और अन्य में ऊपरी छवि दृश्य में शीर्ष बाधा होती है।

यहां छवि विवरण दर्ज करें

जब तालिका पहले भरी हुई होती है (कोशिकाओं में अलग-अलग छवि गणना होती है), यह ठीक दिखता है, लेकिन जब मैं ऊपर और नीचे स्क्रॉल करता हूं, तो कुछ कोशिकाओं में अवरोध पैदा हो रहे हैं और चित्र कोशिकाओं के अंदर अतिव्यापी हो रहे हैं।

यहाँ त्रुटि आउटपुट है:

Unable to simultaneously satisfy constraints.   Probably at least one of the constraints in the following list is one you don"t want.
Try this:
(1) look at each constraint and try to figure out which you don"t expect;
(2) find the code that added the unwanted constraint or constraints and fix it.

"<NSLayoutConstraint:0x17428aaf0 V:|-(0)-[UIImageView:0x14be77ed0]   (active, names: "|":UIView:0x14be75b20 )>",
"<NSLayoutConstraint:0x17428a6e0 UIImageView:0x14be77ed0.height == 160   (active)>",
"<NSLayoutConstraint:0x17428acd0 UIImageView:0x14be77ed0.bottom == UIView:0x14be75b20.bottom   (active)>",
"<NSLayoutConstraint:0x174289650 V:|-(0)-[UIImageView:0x14be43ce0]   (active, names: "|":UIView:0x14be75b20 )>",
"<NSLayoutConstraint:0x17428bb80 UIImageView:0x14be43ce0.height == 160   (active)>",
"<NSLayoutConstraint:0x17428be50 V:[UIImageView:0x14be43ce0]-(10)-[UIImageView:0x14be74b10]   (active)>",

"<NSLayoutConstraint:0x17428bfe0 UIImageView:0x14be74b10.height == 160   (active)>",
"<NSLayoutConstraint:0x17428c080 UIImageView:0x14be74b10.bottom == UIView:0x14be75b20.bottom   (active)>"

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x17428be50 V:[UIImageView:0x14be43ce0]-(10)-[UIImageView:0x14be74b10]   (active)>

कृपया इस मुद्दे पर मेरी मदद करें। धन्यवाद।

उत्तर:

जवाब के लिए 0 № 1

मैं आपको अपनी छवियों को ऊंचाई नहीं देने का सुझाव दूंगा,इसके बजाय अपने कंटेनर दृश्य में एक ऊर्ध्वाधर स्टैकव्यू जोड़ें और वहां अपनी सभी छवियां जोड़ें। सुनिश्चित करें कि उनके पास पहलू मोड फिट करने के लिए सेट है और स्टैकव्यू को बाकी का ध्यान रखना चाहिए। डॉन "t लेबल के नीचे और सेल के तल तक स्टैकव्यू को कसना नहीं भूलता है, इसलिए यह जानता है कि इसमें कितनी जगह है। यह आपकी छवियों का स्वयं ध्यान रखेगा।


उत्तर № 2 के लिए 1

यह सुनिश्चित करने के लिए कि सेल को हटाए जाने पर स्टैक दृश्य में पुरानी छवियां नहीं हैं, आपको इसे साफ करने की आवश्यकता है prepareForReuse():

override func prepareForReuse() {
super.prepareForReuse()

stack.arrangedSubviews.forEach {
stack.removeArrangedSubview($0)
$0.removeFromSuperview()
}
}

जवाब के लिए 0 № 3

ImageViews रनटाइम में जोड़े जाते हैं और इसमें शीर्ष, अग्रणी, अनुगामी, नीचे और ऊंचाई की बाधाओं के लिए बाधा होती है।

यह आपका त्रुटि संदेश है। हटाना भी ऊँचाई या बाधा में से एक जिसे आप चुनते हैं या तो नीचे या ऊपर contraint। आप सभी 4 पक्षों को विवश नहीं कर सकते हैं और उस पर एक ऊंचाई की बाधा जोड़ सकते हैं।

पक्षीय लेख:

चौड़ाई के लिए समान होता है, यदि आप एक चौड़ाई की बाधा निर्धारित करते हैं, तो आप एक ही समय में दोनों पक्षों को अग्रणी / अनुगामी नहीं बना सकते हैं।

संपादित करें:

इसके अलावा, एक का उपयोग करने के साथ आसान बंद UIStackView जैसा कि टिप्पणी अनुभागों में सुझाया गया है।