मेरे पास एक साधारण (मुझे लगता है) समस्या है: मेरे पास UIImageView
है, जिसे मैंने स्टोरीबोर्ड में कई बाधाएं सेट की हैं।सक्षम करें + ऑटो-लेआउट बाधाओं को अक्षम करें
कभी-कभी, मुझे बाधाओं को अक्षम करने की आवश्यकता होगी, और इसे frame
मैन्युअल रूप से सेट करना होगा, लेकिन बाद में, मैं उन बाधाओं को फिर से सक्षम करना चाहता हूं और दृश्यों को वापस लौटा सकता है जहां यह बाधाओं के अनुसार तय किया गया था।
मैंने सोचा कि मैं की तरह कुछ के साथ ऐसा कर सकता है:
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var constraint: NSLayoutConstraint!
func example() {
//to set its location and size manually
imageView.removeConstraint(constraint)
imageView.frame = CGRectMake(...)
//to cause it to return to its original position
imageView.addConstraint(constraint)
}
इस के साथ
, तथापि, मैं त्रुटि 2015-08-26 01:14:55.417 Constraints[18472:923024] The view hierarchy is not prepared for the constraint: <NSLayoutConstraint:0x7fbb72815f90 V:[_UILayoutGuide:0x7fbb72814c20]-(100)-[UIImageView:0x7fbb72814540]>
मिलता है। क्या कोई जानता है कि यह त्रुटि क्यों होती है?
पर पर बाधाओं को जोड़कर self.view.addConstraint(...)
को कॉल करके त्रुटि से छुटकारा पाता है, लेकिन फिर भी छवि दृश्य को वापस जहां नहीं होना चाहिए।
मुझे लगता है कि मुझे समस्या के बिना imageView
के फ्रेम को सेट करने में सक्षम होने के बावजूद बाधाओं को हटाने और न ही निष्क्रिय करने की आवश्यकता नहीं है, जब तक कि मैं setTranslatesAutoresizingMaskIntoConstraints(true)
पर कॉल नहीं करता।
मैंने पहले से ही this प्रश्न देखा है, लेकिन उत्तर अनावश्यक रूप से जटिल, शायद पुराना, और यहां तक कि अनुपयोगी लगता है।
मैंने this प्रश्न भी देखा, लेकिन इसमें बाधाओं को कवर नहीं किया जा सकता है-केवल उन्हें कैसे अक्षम किया जा सकता है।
active
गुण सेट करने के लिए कोशिश कर रहा है:
self.top.active = false
self.right.active = false
self.bottom.active = false
self.left.active = false
imageView.frame = CGRectMake(100, 100, 100, 100)
यह वास्तव में सिर्फ अब दिखाई नहीं देते जा रहा है imageView
का परिणाम है। (यदि मैं सभी बाधाओं को active
संपत्ति को गलत पर सेट नहीं करता हूं, हालांकि imageView
उचित स्थिति में चला जाता है।
वास्तविक समस्या, हालांकि, यह है कि जब मैं छवि दृश्य को वापस लौटने की कोशिश करता हूं सच करने के लिए सभी बाधाओं को 'active
संपत्ति की स्थापना द्वारा, कुछ नहीं होता-imageView रहता है जहां यह था (इस मामले के रूप में imageView.frame = CGRectMake(100, 100, 100, 100)
द्वारा निर्दिष्ट।
इसके अलावा, ऐसा लगता है, मेरे परीक्षण और जोकिम Bøggild के जवाब here के अनुसार, कि जब एक बाधा active
संपत्ति गलत पर सेट की जाती है, तो बाधा शून्य हो जाती है, और इस प्रकार इसे फिर से सक्रिय नहीं किया जा सकता है।
एक सरणी के लिए बाधाओं को जोड़ना और सक्रिय करने/उन्हें निष्क्रिय करने:
दिलचस्प है, इस लगभग ठीक active
संपत्ति करने के समान ही समस्या आ जाती। सभी बाधाओं को एक सरणी array
में रखकर, NSLayoutConstraint.deactivateConstraints(array)
पर कॉल करने से छवि दृश्य गायब हो जाता है। साथ ही, NSLayoutConstraint.activateConstraints(array)
के साथ बाधाओं को फिर से सक्रिय करने के लिए छवि दृश्य वापस नहीं है जहां यह होना चाहिए-यह कहां रहता है।
कृपया अपने समाधान के साथ अपना जवाब पोस्ट करें, इसे अपने प्रश्न में संपादित करने के बजाय –