UIStackView "छिपी हुई" विचारों पर "एक साथ बाधाओं को संतुष्ट करने में असमर्थ"


95

जब मेरे UIStackView "पंक्तियों" को पूरा किया जाता है, तो वे AutoLayoutचेतावनी देते हैं। हालाँकि, वे ठीक प्रदर्शित करते हैं और इन प्रकार के लॉगगिंग्स के अलावा कुछ भी गलत नहीं है:

एक साथ बाधाओं को संतुष्ट करने में असमर्थ। निम्नलिखित सूची में संभवतः कम से कम एक बाधा वह है जिसे आप नहीं चाहते हैं। यह कोशिश करें: (1) प्रत्येक बाधा को देखें और यह पता लगाने की कोशिश करें कि आपको क्या उम्मीद नहीं है; (2) उस कोड को ढूंढें जिसने अवांछित बाधा या बाधाओं को जोड़ा और इसे ठीक किया। (नोट: यदि आप देख रहे हैं NSAutoresizingMaskLayoutConstraintsकि आप नहीं समझते हैं, तो UIViewसंपत्ति के लिए दस्तावेज देखें translatesAutoresizingMaskIntoConstraints) (

इसलिए, मुझे यकीन नहीं है कि इसे कैसे ठीक किया जा सकता है, लेकिन यह सिर्फ परेशान होने के अलावा कुछ भी नहीं तोड़ता है।

क्या कोई इसे हल करना जानता है? दिलचस्प बात यह है कि, लेआउट बाधाओं को अक्सर 'यूआईएसवी-छुपा' के साथ टैग किया जाता है , यह दर्शाता है कि शायद इस उदाहरण में साक्षात्कार या कुछ के लिए ऊंचाई न्यूनतम को अनदेखा करना चाहिए?


1
यह यहां iOS11 में लगाई जानी, कोई चेतावनी नहीं मिल रहा है प्रकट होता है
ट्रैपर

जवाबों:


204

आपको यह समस्या इसलिए मिलती है क्योंकि जब भीतर से किसी सबव्यू UIStackViewको छिपाकर सेट किया जाता है, तो पहले इसे बाहर से चेतन करने के लिए इसकी ऊँचाई को शून्य तक सीमित करना होगा।

मुझे निम्नलिखित त्रुटि मिल रही थी:

2015-10-01 11:45:13.732 <redacted>[64455:6368084] 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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f7f5be18c80 V:[UISegmentedControl:0x7f7f5bec4180]-(8)-|   (Names: '|':UIView:0x7f7f5be69d30 )>",
    "<NSLayoutConstraint:0x7f7f5be508d0 V:|-(8)-[UISegmentedControl:0x7f7f5bec4180]   (Names: '|':UIView:0x7f7f5be69d30 )>",
    "<NSLayoutConstraint:0x7f7f5bdfbda0 'UISV-hiding' V:[UIView:0x7f7f5be69d30(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f7f5be18c80 V:[UISegmentedControl:0x7f7f5bec4180]-(8)-|   (Names: '|':UIView:0x7f7f5be69d30 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

जो मैं करने की कोशिश कर रहा था, वह था कि UIViewमैं अपने भीतर एक ऐसी जगह रखूं, जिसमें प्रत्येक छोर पर 8 चिट्ठे हों।UIStackViewUISegmentedControl

जब मैंने इसे छिपाकर सेट किया, तो यह कंटेनर के दृश्य को शून्य ऊँचाई तक सीमित करने का प्रयास करेगा, लेकिन क्योंकि मेरे पास ऊपर से नीचे तक बाधाओं का एक सेट है, एक संघर्ष था।

समस्या को हल करने के लिए, मैंने अपने 8t के शीर्ष को 1000 से 999 तक नीचे की बाधाओं की प्राथमिकता में बदल दिया ताकि UISV-hidingजरूरत पड़ने पर बाधा तब प्राथमिकता ले सके।


यह ध्यान दिया जाना चाहिए कि ऐसा लगता है जैसे कि आपके पास इन पर एक ऊँचाई या चौड़ाई की बाधा है और उनकी प्राथमिकता कम हो जाएगी यह काम नहीं करेगा। आपको ऊंचाई / चौड़ाई निकालने और शीर्ष अग्रणी अनुगामी
बॉटल्स को

4
प्राथमिकताएं बदलने से मेरे लिए भी काम किया। इसके अलावा, किसी भी अतिरिक्त (धुंधली) बाधाओं को हटाकर, जिन्हें अप्रयुक्त आकार की कक्षाओं से गलती से कॉपी किया गया था। महत्वपूर्ण सुझाव: इन समस्याओं को अधिक आसानी से डीबग करने के लिए, प्रत्येक बाधा पर IDENTIFER स्ट्रिंग सेट करें। फिर आप देख सकते हैं कि डिबग मैसेज में कौन सी कांस्ट्रेक्ट शरारती थी।
वोमबल

3
मेरे मामले में, मुझे केवल ऊंचाई पर प्राथमिकता कम करनी होगी और यह काम करेगा।
Pixelfreak

उस महान टिप टिप महान है! मुझे हमेशा आश्चर्य होता है कि डिबग संदेश नामों में बाधाओं को कैसे दिया जाए, मैं हमेशा बाधा के बजाय दृश्य में कुछ जोड़ना चाहता था। धन्यवाद @ विसंगति!
रयान

धन्यवाद! १००० से १ ९९९ तक की प्राथमिकता ने किया चाल। Xcode: संस्करण 8.३.३ (4३००४ बी)
माइकल गैरीटो

51

मुझे एक समान समस्या हो रही थी जिसे हल करना आसान नहीं था। मेरे मामले में, मुझे स्टैक दृश्य में एक स्टैक दृश्य एम्बेडेड था। आंतरिक UIStackView में दो लेबल थे और एक गैर-शून्य रिक्ति निर्दिष्ट थी।

जब आप addArrangedSubview () कहते हैं, तो यह स्वचालित रूप से निम्नलिखित के समान अवरोध पैदा करेगा:

V:|[innerStackView]|              | = outerStackView

  V:|[label1]-(2)-[label2]|       | = innerStackView

अब जब आप इनरस्टैक व्यू को छिपाने की कोशिश करते हैं, तो आपको एक अस्पष्ट बाधा चेतावनी मिलती है।

यह समझने के लिए कि, पहले देखें कि ऐसा क्यों नहीं होता है जब innerStackView.spacingसमान के बराबर होता है 0। जब आप कॉल करते हैं innerStackView.hidden = true, तो @liamnichols सही थे ... outerStackViewविल जादुई रूप से इस कॉल को इंटरसेप्ट करेगा, और प्राथमिकता 1000 (आवश्यक) के साथ एक 0ऊंचाई यूआईएसवी-छुपा बाधा बनाएँ । संभवतया यह है कि स्टैक दृश्य में तत्वों को देखने की अनुमति न दें, क्योंकि आपका छुपा कोड एक UIView.animationWithDuration()ब्लॉक के भीतर कहा जाता है । दुर्भाग्य से, इस बाधा को जोड़ने से रोकने का कोई तरीका प्रतीत नहीं होता है। फिर भी, आपको निम्न के बाद से एक "बाधाओं को एक साथ संतुष्ट करने में असमर्थ" (USSC) चेतावनी नहीं मिलेगी:

  1. लेबल 1 की ऊंचाई 0 पर सेट है
  2. दो लेबल के बीच अंतर पहले से ही 0 के रूप में परिभाषित किया गया था
  3. लेबल 2 की ऊंचाई 0 पर सेट है
  4. इनरस्टैक व्यू की ऊंचाई 0 पर सेट है

यह देखने के लिए स्पष्ट है कि उन 4 बाधाओं को संतुष्ट किया जा सकता है। स्टैक दृश्य बस 0-ऊंचाई पिक्सेल में सब कुछ smooshes।

अब गाड़ी उदाहरण के लिए वापस जा, अगर हम सेट spacingकरने के लिए 2, अब हम इन बाधाओं है:

  1. लेबल 1 की ऊंचाई 0 पर सेट है
  2. दो लेबल के बीच की दूरी स्वचालित रूप से 1000 प्राथमिकता पर 2 पिक्सल उच्च के रूप में स्टैक दृश्य द्वारा बनाई गई थी।
  3. लेबल 2 की ऊंचाई 0 पर सेट है
  4. इनरस्टैक व्यू की ऊंचाई 0 पर सेट है

स्टैक दृश्य दोनों 0 पिक्सेल उच्च नहीं हो सकता है और इसकी सामग्री 2 पिक्सेल ऊँची हो सकती है। बाधाओं को संतुष्ट नहीं किया जा सकता है।

नोट: आप इस व्यवहार को एक सरल उदाहरण के साथ देख सकते हैं। एक व्यवस्थित सबव्यू के रूप में स्टैक व्यू में यूआईवाईईवी को जोड़ें। फिर 1000 की प्राथमिकता के साथ उस उइवे पर एक ऊंचाई की बाधा निर्धारित करें। अब उस पर कॉल छिपाने की कोशिश करें।

नोट: जो भी कारण के लिए, यह केवल तब हुआ जब मेरा स्टैक दृश्य UICollectionViewCell या UITableViewCell का उप-भाग था। हालाँकि, आप अभी भी innerStackView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)आंतरिक स्टैक दृश्य को छुपाने के बाद अगले रन लूप पर कॉल करके सेल के बाहर इस व्यवहार को पुन: पेश कर सकते हैं।

नोट: यदि आप UIView.performWithoutAnimations में कोड निष्पादित करने का प्रयास करते हैं, तब भी स्टैक दृश्य 0 ऊंचाई की बाधा को जोड़ देगा जो USSC चेतावनी का कारण होगा।


इस समस्या के कम से कम 3 समाधान हैं:

  1. स्टैक दृश्य में किसी भी तत्व को छिपाने से पहले, देखें कि क्या यह स्टैक दृश्य है, और यदि ऐसा है, तो spacingइसे 0. में बदल दें। यह कष्टप्रद है क्योंकि आपको जब भी आप सामग्री दिखाते हैं तो प्रक्रिया को उल्टा करने की आवश्यकता होती है (और मूल रिक्ति को याद रखें)।
  2. स्टैक दृश्य में तत्वों को छिपाने के बजाय, कॉल करें removeFromSuperviewयह और भी अधिक कष्टप्रद है क्योंकि जब आप प्रक्रिया को उलटते हैं, तो आपको यह याद रखना होगा कि हटाए गए आइटम को कहां डालें। आप केवल हटाने के द्वारा अनुकूलन कर सकते हैंअनुरक्षितSubview और फिर छिपाना, लेकिन बहुत सारे बहीखाता है जो अभी भी किए जाने की आवश्यकता है।
  3. spacingUIView में नेस्टेड स्टैक दृश्य (जो गैर-शून्य है ) को लपेटें । गैर-आवश्यक प्राथमिकता (999 या नीचे) के रूप में कम से कम एक बाधा निर्दिष्ट करें। यह सबसे अच्छा उपाय है क्योंकि आपको कोई बहीखाता नहीं करना है। मेरे उदाहरण में, मैंने स्टैक दृश्य और आवरण दृश्य के बीच 1000 पर शीर्ष, अग्रणी और अनुगामी अवरोधों का निर्माण किया, फिर स्टैक दृश्य के नीचे से आवरण दृश्य के नीचे से 999 अवरोध बनाया। इस तरह जब बाहरी स्टैक दृश्य शून्य ऊंचाई की बाधा बनाता है, तो 999 बाधा टूट जाती है और आप USSC चेतावनी नहीं देखते हैं। (नोट: यह समाधान के समान होना चाहिए ContentView.translatesAutoResizingMaskToConstraints के एक UICollectionViewCell उपवर्ग के लिए सेट किया जाना चाहिएfalse )

सारांश में, आपको यह व्यवहार मिलने के कारण हैं:

  1. जब आप एक स्टैक दृश्य में प्रबंधित साक्षात्कार जोड़ते हैं, तो Apple स्वचालित रूप से आपके लिए 1000 प्राथमिकताएं बनाता है।
  2. जब आप स्टैक दृश्य के उप-भाग को छिपाते हैं तो Apple स्वचालित रूप से आपके लिए 0-ऊँचाई की बाधा बनाता है।

यदि Apple या तो (1) आपको बाधाओं (विशेषकर स्पेसर्स ) की प्राथमिकता को निर्दिष्ट करने की अनुमति देता, या (2) आपको स्वचालित UISV- छुपा बाधा से बाहर निकलने की अनुमति देता , तो यह समस्या आसानी से हल हो जाती।


6
सुपर पूरी तरह से और उपयोगी स्पष्टीकरण के लिए धन्यवाद। हालांकि यह निश्चित रूप से स्टैक विचारों के साथ एप्पल के पक्ष में एक बग की तरह लगता है। मूल रूप से उनकी "छिपाई" सुविधा उनके "रिक्ति" सुविधा के साथ असंगत है। उनमें से किसी भी विचार ने तब से इसे हल किया है, या अतिरिक्त युक्तियों के साथ हैकिंग को रोकने के लिए कुछ सुविधाएँ जोड़ी हैं? (फिर से, संभावित समाधानों का शानदार
विराम

1
क्या हर एक UIStackViewबच्चे को एक UIStackViewलिपटे रहने की ज़रूरत है UIViewया सिर्फ एक जिसे आप छिपाने / अनहाइड करने की कोशिश कर रहे हैं?
एड्रियन

1
ऐसा लगता है कि Apple के हिस्से पर बहुत बुरा प्रभाव है। विशेष रूप से क्योंकि चेतावनियों के उपयोग के बारे में चेतावनियाँ और त्रुटियां UIStackViewगुप्त और समझने में कठिन हैं।
बंमफ

यह एक लाइफसेवर है। मुझे एक समस्या हो रही थी जहाँ UIStackViews को एक UITableViewCell में जोड़ा गया था जिससे AutoLayout त्रुटि लॉग स्पैमिंग हो रही थी, हर बार सेल का पुन: उपयोग किया जाता था। UIVIV में स्टैक व्यू को एंबेड करना, इसकी निचली एंकर बाधा को कम करने के लिए प्राथमिकता के साथ, समस्या को हल किया। यह स्टैक व्यू के तत्वों को अस्पष्ट ऊंचाइयों को दिखाने के लिए डिबगर का कारण बनता है, लेकिन यह एप्लिकेशन में ठीक से दिखाता है, बिना त्रुटि लॉग स्पैम के। धन्यवाद।
Womble

6

अधिकांश समय, संघर्षों को खत्म करने के लिए बाधाओं को कम करके इस त्रुटि को हल किया जा सकता है।


आपका क्या अर्थ है? बाधाएं खड़ी होने वाले विचारों के भीतर सभी सापेक्ष हैं ....
बेन गिल्ड

मुझे क्षमा करें, मैं आपके प्रश्न को ठीक से नहीं समझ पा रहा हूं, मेरी अंग्रेजी इतनी ही है, लेकिन मुझे क्या लगता है कि बाधाएं डायन के संबंध में हैं, यह जुड़ा हुआ है, अगर दृश्य छिपा हो जाता है तो बाधाएं निष्क्रिय हो जाती हैं। मुझे यकीन नहीं है कि अगर आपका संदेह है, लेकिन मुझे आशा है कि मैं मदद कर सकता हूं।
लूसियानो अल्मेडा

ऐसा तब लगता है जब सामान को स्क्वीट किया जाता है या दिखाया / छिपाए जाने की प्रक्रिया में होता है। इस मामले में, यह आंशिक रूप से दिखाई देता है। - शायद यह वास्तव में किसी भी न्यूनतम ऊर्ध्वाधर स्थिरांक के माध्यम से जाना और समाप्त करना आवश्यक है क्योंकि इसे 0 ऊंचाई तक पूरा किया जा सकता है?
बेन गिल्ड

2

जब आप छिपे हुए को देखते हैं, तो UIStackviewवह उसे दूर करने का प्रयास करेगा। यदि आप उस प्रभाव को चाहते हैं, तो आपको बाधाओं के लिए सही प्राथमिकता निर्धारित करने की आवश्यकता होगी ताकि वे संघर्ष न करें (जैसा कि ऊपर कई ने सुझाव दिया है)।

हालाँकि यदि आप एनीमेशन की परवाह नहीं करते हैं (शायद आप इसे ViewDidLoad में छिपा रहे हैं), तो आप इसे सरल बना सकते हैं, removeFromSuperviewजिसका प्रभाव समान होगा, लेकिन बाधाओं के बिना किसी भी समस्या के बिना, क्योंकि इन्हें देखने के साथ हटा दिया जाएगा।


1

@ सेंसफुल के जवाब के आधार पर, यहाँ एक दृश्य में स्टैक दृश्य को लपेटने के लिए एक UIStackView एक्सटेंशन है और वह या वह जो सिफारिश करता है उसे लागू करता है:

/// wraps in a `UIView` to prevent autolayout warnings when a stack view with spacing is placed inside another stack view whose height might be zero (usually due to `hidden` being `true`).
/// See http://stackoverflow.com/questions/32428210
func wrapped() -> UIView {
    let wrapper = UIView()
    translatesAutoresizingMaskIntoConstraints = false
    wrapper.addSubview(self)

    for attribute in [NSLayoutAttribute.Top, .Left, .Right, .Bottom] {
        let constraint = NSLayoutConstraint(item: self,
                                            attribute: attribute,
                                            relatedBy: .Equal,
                                            toItem: wrapper,
                                            attribute: attribute,
                                            multiplier: 1,
                                            constant: 0)
        if attribute == .Bottom { constraint.priority = 999 }
        wrapper.addConstraint(constraint)
    }
    return wrapper
}

अपने जोड़ने के बजाय stackView, का उपयोग करें stackView.wrapped()


1

सबसे पहले, जैसा कि दूसरों ने सुझाव दिया है, सुनिश्चित करें कि आप जिन बाधाओं को नियंत्रित कर सकते हैं, यानी यूआईएसटैक्यूवे के लिए निहित बाधाओं को प्राथमिकता 999 पर सेट नहीं किया गया है, ताकि दृश्य के छिपे होने पर उन्हें ओवरराइड किया जा सके।

यदि आप अभी भी समस्या का सामना कर रहे हैं, तो छिपी हुई StackViews में रिक्ति के कारण समस्या होने की संभावना है। मेरा समाधान एक स्पेसर के रूप में एक UIView को जोड़ना था और UIStackView रिक्ति को शून्य पर सेट करना था। फिर StackView के रिक्ति पर View.height या View.width बाधाओं (एक ऊर्ध्वाधर या क्षैतिज स्टैक के आधार पर) को सेट करें।

फिर अपने नए जोड़े गए विचारों की सामग्री आलिंगन और सामग्री संपीड़न प्रतिरोध प्राथमिकताओं को समायोजित करें। आपको मूल StackView का वितरण भी बदलना पड़ सकता है।

उपरोक्त सभी इंटरफ़ेस बिल्डर में किया जा सकता है। आपको अतिरिक्त रूप से नए जोड़े गए कुछ विचारों को प्रोग्रामिक रूप से छिपाना / खोलना पड़ सकता है, ताकि आपके पास अवांछित रिक्ति न हो।


1

मैं हाल ही में ऑटो लेआउट त्रुटियों के साथ कुश्ती जब एक छिपा UIStackView। अंदर किताबों के ढेर रखने और ढेर UIViewsलगाने के बजाय , मैंने parentStackViewउन बच्चों के लिए अपने और आउटलेट के लिए एक आउटलेट बनाने का विकल्प चुना, जिन्हें मैं छिपाना / अनसुना करना चाहता हूं।

@IBOutlet weak var parentStackView: UIStackView!
@IBOutlet var stackViewNumber1: UIStackView!
@IBOutlet var stackViewNumber2: UIStackView!

स्टोरीबोर्ड में, यहाँ मेरा पेरेंटस्टैक कैसा दिखता है:

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

इसमें 4 बच्चे हैं और प्रत्येक बच्चे के अंदर ढेर सारे विचारों का एक समूह है। जब आप स्टैक दृश्य को छिपाते हैं, अगर इसमें यूआई तत्व मिले हैं जो स्टैक व्यू भी हैं, तो आपको ऑटो लेआउट त्रुटियों की एक धारा दिखाई देगी। छिपाने के बजाय, मैंने उन्हें हटाने का विकल्प चुना।

मेरे उदाहरण में, parentStackViews4 तत्वों की एक सरणी है: शीर्ष स्टैक व्यू, स्टैक व्यूएनम्बर 1, स्टैक व्यू नंबर 2 और स्टॉप बटन। उनके सूचकांक arrangedSubviewsक्रमशः 0, 1, 2 और 3 हैं। जब मैं एक को छिपाना चाहता हूं, तो मैं इसे parentStackView's arrangedSubviewsसरणी से हटा देता हूं । चूंकि यह कमजोर नहीं है, यह स्मृति में लिंटर करता है और आप इसे बाद में अपने इच्छित सूचकांक में वापस रख सकते हैं। मैं इसे पुन: स्थापित नहीं कर रहा हूं, इसलिए यह केवल तब तक लटका रहता है जब तक कि यह आवश्यक न हो, लेकिन स्मृति को फूला नहीं समाता।

तो मूल रूप से, आप कर सकते हैं ...

1) अपने माता-पिता के ढेर और उन बच्चों के लिए IBOutlets खींचें जो आप स्टोरीबोर्ड में छिपाना / अनसाइड करना चाहते हैं।

2) जब आप उन्हें छिपाना चाहते हैं, तो उस स्टैक को हटा दें जिसे आप parentStackView's arrangedSubviewsऐरे से छुपाना चाहते हैं ।

3) self.view.layoutIfNeeded()साथ बुलाओ UIView.animateWithDuration

ध्यान दें कि पिछले दो स्टैक व्यू नहीं हैं weak। जब आप उन्हें अनसुना करते हैं, तो आपको उन्हें इधर-उधर रखने की जरूरत है।

मान लीजिए कि मैं stackViewNumber2 छिपाना चाहता हूं:

parentStackView.removeArrangedSubview(stackViewNumber2)
stackViewNumber2.removeFromSuperview()

फिर इसे चेतन करें:

UIView.animate(withDuration: 0.25,
               delay: 0,
               usingSpringWithDamping: 2.0,
               initialSpringVelocity: 10.0,
               options: [.curveEaseOut],
               animations: {
                self.view.layoutIfNeeded()
},
               completion: nil)

यदि आप stackViewNumber2बाद में "अनहाइड" करना चाहते हैं , तो आप इसे वांछित parentStackView arrangedSubViewsइंडेक्स में सम्मिलित कर सकते हैं और अपडेट को एनिमेट कर सकते हैं।

parentStackView.removeArrangedSubview(stackViewNumber1)
stackViewNumber1.removeFromSuperview()
parentStackView.insertArrangedSubview(stackViewNumber2, at: 1)

// Then animate it
UIView.animate(withDuration: 0.25,
               delay: 0,
               usingSpringWithDamping: 2.0,
               initialSpringVelocity: 10.0,
               options: [.curveEaseOut],
               animations: {
                self.view.layoutIfNeeded()
},
               completion: nil)

मैंने पाया कि बाधाओं पर बहीखाता करना, प्राथमिकताओं के साथ काम करना, इत्यादि से बहुत आसान होना।

यदि आपके पास कुछ ऐसा है जिसे आप डिफ़ॉल्ट रूप से छिपाना चाहते हैं, तो आप इसे स्टोरीबोर्ड पर रख सकते हैं और इसे हटा सकते हैं viewDidLoadऔर एनीमेशन का उपयोग किए बिना अपडेट कर सकते हैं view.layoutIfNeeded()


1

मुझे एम्बेडेड स्टैक दृश्य के साथ समान त्रुटियों का अनुभव हुआ, हालांकि रनटाइम में सब कुछ ठीक रहा।

मैंने isHidden = trueपेरेंट स्टैक दृश्य को छिपाने से पहले सभी उप-स्टैक दृश्य पहले (सेटिंग ) को छिपाकर बाधा त्रुटियों को हल किया ।

ऐसा करने से उप व्यवस्थित विचारों को हटाने की कोई जटिलता नहीं थी, जब उन्हें वापस जोड़ने की आवश्यकता के लिए एक सूचकांक बनाए रखा जाता था।

उम्मीद है की यह मदद करेगा।


1

सेंसफुल ने समस्या की जड़ के ऊपर एक उत्कृष्ट उत्तर प्रदान किया है इसलिए मैं सीधे समाधान पर जाऊंगा।

आपको बस इतना करना है कि सभी स्टैक व्यू बाधाओं को 1000 से कम प्राथमिकता दें (999 काम करेगा)। उदाहरण के लिए यदि स्टैक व्यू बाएं, दाएं, ऊपर और नीचे अपने सुपरवाइज के लिए विवश है तो सभी 4 बाधाओं में 1000 से कम प्राथमिकता होनी चाहिए।


0

आपने एक निश्चित आकार वर्ग (उदा: wCompact hRegular) के साथ काम करते समय एक बाधा पैदा की हो सकती है और फिर जब आप किसी अन्य आकार वर्ग (उदा: wAny hAny) पर स्विच करते हैं तो आपने एक डुप्लिकेट बनाया। अलग-अलग आकार की कक्षाओं में यूआई ऑब्जेक्ट्स की बाधाओं की जांच करें और देखें कि क्या बाधाओं के साथ विसंगतियां हैं। आपको लाल रेखाओं को टकराव की ओर संकेत करते हुए देखना चाहिए। मैं तब तक तस्वीर नहीं लगा सकता, जब तक कि मुझे 10 प्रतिष्ठा अंक प्राप्त न हो जाएं:


ओह ठीक। लेकिन मुझे वह त्रुटि मिली जब मेरे पास मामला था जब मैंने drive.google.com/file/d/0B-mn7bZcNqJMVkt0OXVLVVdnNTA/…
FM

हाँ, मैं निश्चित रूप से इंटरफ़ेस बिल्डर में आकार वर्गों toggling द्वारा किसी भी लाल नहीं देख रहा हूँ। मैंने केवल "किसी भी" आकार का उपयोग किया।
बेन गिल्ड

0

मैं एक समय में पूरे UIStackView को छिपाना चाहता था, लेकिन मुझे ओपी के समान त्रुटियां हो रही थीं, इसने मेरे लिए इसे ठीक कर दिया:

for(UIView *currentView in self.arrangedSubviews){
    for(NSLayoutConstraint *currentConstraint in currentView.constraints){
        [currentConstraint setPriority:999];
    }
}

यह मेरे लिए काम नहीं आया क्योंकि ऑटो लेआउट इंजन शिकायत करता है जब आप एक आवश्यक बाधा ( priority = 1000) को आवश्यक नहीं ( ) में बदलते हैं priority <= 999
सेंसफुल

0

मेरे पास ऊंचाई की कमी के साथ बटन की एक पंक्ति थी। ऐसा तब होता है जब एक बटन छिपा होता है। उस बटन ऊंचाई की प्राथमिकता को 999 पर सेट करने से समस्या हल हो गई है।


-2

इस त्रुटि का UIStackView से कोई लेना-देना नहीं है। यह तब होता है जब आपके पास समान प्राथमिकताओं के साथ संघर्ष की बाधाएं होती हैं। उदाहरण के लिए, यदि आपके पास एक विवशता है कि आपके विचार की चौड़ाई 100 है, और आपके पास एक ही समय में एक और अड़चन यह है कि दृश्य की चौड़ाई उसके कंटेनर का 25% है। स्पष्ट रूप से दो परस्पर विरोधी अवरोध हैं। इसका समाधान उन पर हटाना है।


-3

NOP के साथ [mySubView removeFromSuperview]। मुझे आशा है कि यह किसी की मदद कर सकता है :)


क्षमा करें, एनओपी क्या है?
पैंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.