2015-07-07 7 views
13

मैं एक फेसबुक एसडीके लॉगिन बटन में बाधाओं को जोड़ने की कोशिश कर रहा हूं।बाधाओं को प्रोग्रामेटिक रूप से तेज़ी से जोड़ें

मेरे पास स्क्रॉल व्यू के अंदर बटन है और मैं स्क्रॉल व्यू में एक लेबल में शीर्ष बाधा जोड़ने की कोशिश कर रहा हूं। मैं बिना किसी रन टाइम त्रुटियों के साथ ऊंचाई बाधा को सफलतापूर्वक जोड़ सकता हूं लेकिन वास्तविक बाधा बटन पर लागू नहीं होती है।

जब एक दृश्य में जोड़ा, बाधा के आइटम उस दृश्य के वंशज होना चाहिए (या खुद देखें):

@IBOutlet weak var orLbl: UILabel! 
@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    var loginFBButton = FBSDKLoginButton() 
    loginFBButton.readPermissions = ["public_profile", "email"] 

    let heightConstraint = NSLayoutConstraint(
     item: loginFBButton, 
     attribute: NSLayoutAttribute.Height, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: nil, 
     attribute: NSLayoutAttribute.NotAnAttribute, 
     multiplier: 1, 
     constant: 41) 
    let topConstraint = NSLayoutConstraint(
     item: loginFBButton, 
     attribute: NSLayoutAttribute.TopMargin, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.orLbl, 
     attribute: NSLayoutAttribute.BottomMargin, 
     multiplier: 1, 
     constant: 31) 
    let leadingConstraint = NSLayoutConstraint(
     item: loginFBButton, 
     attribute: NSLayoutAttribute.Leading, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.registerButton, 
     attribute: NSLayoutAttribute.Left, 
     multiplier: 1, 
     constant: 0) 
    let trailingConstraint = NSLayoutConstraint(
     item: loginFBButton, 
     attribute: NSLayoutAttribute.Leading, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.registerButton, 
     attribute: NSLayoutAttribute.Right, 
     multiplier: 1, 
     constant: 0) 

    self.scrollView.addSubview(loginFBButton) 
    //loginFBButton.center = self.scrollView.center 

    loginFBButton.addConstraints([heightConstraint, topConstraint]) 

} 

फिर जब मैं शीर्ष बाधा के अलावा शामिल हैं, मैं एक रनटाइम त्रुटि हो रही है । दृश्य पदानुक्रम को इकट्ठा करने से पहले बाधा को हल करने की आवश्यकता होने पर यह दुर्घटनाग्रस्त हो जाएगा।

बिना किसी अपवाद 'NSGenericException' के कारण ऐप को समाप्त करना, कारण: 'दृश्य पर बाधा स्थापित करने में असमर्थ। क्या बाधा दृश्य के उप-भाग के बाहर से कुछ संदर्भित करती है? यह अवैध है।

लेबल और फेसबुक बटन दोनों मेरे स्क्रॉल व्यू में हैं? मैंने orLbl.superview और loginFBButton.superview को भी मुद्रित किया है और मुझे

+0

क्या आपने यह पता लगाने की कोशिश की है कि दो बाधाओं में से कौन सा अपवाद अपवाद का कारण बनता है? – freytag

+0

@freytag हां प्रश्न में उल्लिखित है, यह तब था जब मैंने शीर्ष बाधा को जोड़ा, दुर्घटना हो रही थी। एक और उपयोगकर्ता ने लॉगिन एफबी बटन के बजाय स्क्रॉलव्यू में बाधाओं को जोड़ने का सुझाव दिया। मैंने ऐसा किया और कोई रनटाइम त्रुटियां नहीं मिलीं लेकिन फिर मेरा फेसबुक बटन स्क्रीन के ऊपरी बाईं ओर है और लेबल पूरी तरह से स्क्रीन से बाहर है – user2363025

उत्तर

28

दोनों के लिए वैकल्पिक uiscrollview मिल रहा है। एक नया (आईओएस 8, ओएस 10.10) है, जो बाधाओं को सक्रिय करने के लिए आसान तरीका है जिसमें कौन से विचार शामिल नहीं हैं उन्हें जोड़ने के लिए। की कमी पहले से ही पता कौन-सा दृश्य वे करने के लिए है, तो पहले सुनिश्चित करें कि आपके विचारों subviews के रूप में शामिल किया गया है बनाने के लिए हैं, तो वर्ग विधि activateConstraintsNSLayoutConstraint पर उन्हें सक्रिय करने के कॉल:

NSLayoutConstraint.activateConstraints([heightConstraint, topConstraint]) 

जब आप UI तत्व प्रोग्राम के रूप में बनाने के लिए, आप की जरूरत आईओएस को बताने के लिए अपने फ्रेम को बाधाओं में बदलने के लिए नहीं। ऐसा करने के लिए, बस loginFBButton बनाने के बाद कार्य करें:

स्विफ्ट 1.2 के लिए:

loginFBButton.setTranslatesAutoresizingMaskIntoConstraints(false) 

स्विफ्ट के लिए 2.0 & 3.0:

loginFBButton.translatesAutoresizingMaskIntoConstraints = false 

अंत में, आप अधिक की जरूरत करने जा रहे हैं बाधाओं। मैं आपके loginFBButton के लिए चौड़ाई बाधा स्थापित करने और क्षैतिज बटन को स्थिति में रखने के लिए बाधा जोड़ना चाहता हूं।

+0

मैंने कोड की सभी बाधाओं को शामिल करने के लिए कोड अपडेट किया है। तो इस बिंदु पर मैं अभी भी बाधाओं को जोड़ रहा हूं और फिर अनुवाद सेट कर रहा हूंऑटोरेसिंगमास्कइनो कॉन्स्ट्रेनट्स बूल या प्रवाह क्या है? – user2363025

+0

अपना बटन बनाएं, अनुवाद सेट करेंऑटोरेसिंगमास्कइंटो कॉन्स्ट्रेनेंट्स को झूठा करने के लिए, स्क्रॉल व्यू में अपना बटन जोड़ें, बाधाएं बनाएं और उन्हें सक्रिय करें। – vacawama

+0

धन्यवाद, मुझे इसका उपयोग करने के लिए मिल गया, loginFBButton.setTranslatesAutoresizingMaskIntoConstraints (false)। मुझे स्क्रॉल व्यू में बाधाएं जोड़ने और लॉगिन एफबी बटन पर भी सुनिश्चित करना था। मुझे सक्रिय बाधाओं का उपयोग करने की आवश्यकता नहीं थी हालांकि – user2363025

संबंधित मुद्दे