2016-02-11 12 views
5

मैं एक एंड्रॉइड डेवलपर हूं जो एक्सकोड पर मेरे हाथ की कोशिश कर रहा है और अब तक अप्रिय रहा है।एक्सकोड स्विफ्ट व्यू रैप सामग्री

  • UIImageView (एक आइकन के लिए)
  • UILabel (खिताब के लिए)
  • UILabel (सामग्री के लिए)
  • : मुझे क्या करना कोशिश कर रहा हूँ तीन उप दृश्य दिखाई देते हैं कि एक कस्टम दृश्य है

मुझे यह चाहिए कि सामग्री लेबल की ऊंचाई बढ़ती है और उस पाठ को लपेटने के लिए घट जाती है (जैसे एंड्रॉइड के wrap_content)। और फिर, मैं चाहता हूं कि कस्टम दृश्य भी तीनों उप दृश्यों को लपेटने के लिए बढ़े और सिकुड़ें।

हालांकि, मैं नहीं कर सकता, मेरे जीवन के लिए, यह पता लगाएं कि ये ऑटो लेआउट/बाधाएं कैसे काम करती हैं।

01) मैं अपने यूआईएलएबल की ऊंचाई को अपने निहित पाठ से मेल खाने के लिए कैसे बढ़ा सकता/सकती हूं?

02) मैं अपने कस्टम दृश्य की ऊंचाई को अपने निहित उप दृश्यों से मेल खाने के लिए कैसे बढ़ा/घटाना चाहूंगा?

override func layoutSubviews() { 
    super.layoutSubviews() 
    img_icon = UIImageView() 
    txt_title = UILabel() 
    txt_content = UILabel() 

    img_icon.backgroundColor = Palette.white 
    img_icon.image = icon 
    txt_title.text = title 
    txt_title.textAlignment = .Center 
    txt_title.font = UIFont(name: "Roboto-Bold", size:14) 
    txt_title.textColor = Palette.txt_heading1 
    txt_content.text = content 
    txt_content.textAlignment = .Center 
    txt_content.font = UIFont(name: "Roboto-Regular", size:12) 
    txt_content.textColor = Palette.txt_dark 
    txt_content.numberOfLines = 0 
    txt_content.preferredMaxLayoutWidth = self.frame.width 
    txt_content.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    self.backgroundColor = Palette.white 
    addSubview(img_icon) 
    addSubview(txt_title) 
    addSubview(txt_content) 

    /*snip img_icon and txt_title constraints*/ 

    let txt_content_x = NSLayoutConstraint(item: txt_content, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0) 
    let txt_content_y = NSLayoutConstraint(item: txt_content, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 80) 
    let txt_content_w = NSLayoutConstraint(item: txt_content, attribute: .Width, relatedBy: .Equal, toItem: self, attribute: .Width, multiplier: 1, constant: 0) 
    let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40) 
    txt_content.translatesAutoresizingMaskIntoConstraints = false 
    NSLayoutConstraint.activateConstraints([ 
     txt_content_x, 
     txt_content_y, 
     txt_content_w, 
     txt_content_h 
    ]) 
} 

मैं समझता हूँ कि, ऊपर कोड मैं कोशिश की है, मैं ऊंचाई एक निरंतर 40 लिए निर्धारित किया है। यह केवल इसलिए है क्योंकि मुझे नहीं पता कि मैं क्या हासिल करना चाहता हूं।

[संपादित करें]

मैं इससे अधिक या इसके बराबर ऊंचाई बाधा स्थापित करने की कोशिश की है, लेकिन यह सिर्फ Xcode दुर्घटनाओं।

[संपादित करें]

यह Xcode दुर्घटनाओं अगर मैं इसे देखने का प्रयास करें, लेकिन सिम्युलेटर में पूरी तरह से ठीक काम करता है। प्रश्न अब है, क्यों?

मेरे ऊंचाई बाधा है:

let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .GreaterThanOrEqual, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40) 

यह सिम्युलेटर में काम करता है और वांछित व्यवहार है। हालांकि, अगर मैं स्टोरीबोर्ड खोलता हूं जिसमें दृश्य होता है, तो यह क्रैश हो जाता है। यह निश्चित रूप से कोड की रेखा है क्योंकि इसे .Equal पर बदलकर क्रैश को हल करता है।

[संपादित करें]

मेरे अस्थायी ठीक है:

#if TARGET_INTERFACE_BUILDER 
    //use .Equal for height constraint 
#else 
    //use .GreaterThanOrEqual for height constraint 
#endif 

इस तरह, यह Xcode क्रैश नहीं होता है और अभी भी तरह से मैं यह सिम्युलेटर पर चाहते हैं बना देता है।

[संपादित करें]

मैं और पूर्व प्रोसेसर जांच हटा दिया क्योंकि मैंने महसूस किया कि वहाँ कोई वास्तविक बात है उस तरह परिभाषित यह अभी भी अब काम करता है। मैं कसम खाता हूं कि मैंने बदल दिया है

मैं हूं आईओएस विकास को छोड़ने के करीब है क्योंकि इंटरफ़ेस निर्माता बिना किसी कारण के एक्सकोड को क्रैश कर रहा है जब सब कुछ सिम्युलेटर में काम करता है। फिर, मैं कुछ बकवास संपादन करता हूं और यह फिर से ठीक काम करता है।

उत्तर

4

01) मैं अपने यूआईएलएबल की ऊंचाई को अपने निहित पाठ से मेल खाने के लिए कैसे बढ़ा सकता/सकती हूं?

लेबल पर्यवेक्षण में बस ऊपर, बाएं और दाएं-बाधा सेट करें। संपत्ति number of lines से 0 पर सेट करें। फिर यह पाठ लपेटना शुरू कर देगा।

02) मैं अपने कस्टम दृश्य की ऊंचाई को अपने निहित उप दृश्यों से मेल खाने के लिए कैसे बढ़ा/घटाना चाहूंगा?

इंटरफ़ेस बिल्डर का उपयोग करके यह हासिल करना बहुत आसान है।

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

यदि आप प्रोग्रामेटिक बाधाओं का उपयोग करना चाहते हैं, तो मेरा सुझाव है कि इसके लिए एक ढांचा का उपयोग करना शुरू करें। उदाहरण के लिए: https://github.com/SnapKit/SnapKit

+0

सलाह, आदमी के लिए धन्यवाद अच्छा का एक बहुत हो जाएगा। मैंने सोचा कि एकमात्र तरीका पसंदीदा चौड़ाई को पर्यवेक्षण की चौड़ाई को प्रोग्रामेटिक रूप से सेट करना था। मैंने इसके बारे में नहीं सोचा था। मेरा एकमात्र मुद्दा यह है कि इंटरफ़ेस बिल्डर और एक्सकोड बार-बार, मनमाने ढंग से काम करना बंद करने का निर्णय लेता है जब तक कि मैं कुछ कोड को स्थानांतरित नहीं करता जिसके आसपास कुछ भी प्रभावित नहीं होता है। यह हर कुछ मिनटों में होता है और मैं एक्सकोड को पुनरारंभ करना जारी रख सकता हूं और यह तब तक मदद नहीं करता जब तक कि मैं "45" से "125" या कुछ यादृच्छिक सामानों की ऊंचाई को बदलने जैसे कुछ कोड को स्थानांतरित करने का निर्णय नहीं लेता। या, जैसा कि मेरे संपादन में देखा गया है, उस मान को चेक जोड़ना जो अस्तित्व में नहीं है और फिर हटा रहा है। –

+0

इसे आज़माएं: http://stackoverflow.com/questions/18933321/deleting-contents-from-xcode-derived-data-folder – ullstrm

0

अक्सर साफ जब ar सब, cmd-Shift-K बिना किसी कारण के कोड जाम अगर मैं सही ढंग से याद

+0

यह उत्तर की तुलना में एक टिप्पणी की तरह है। –

+0

मुझे नहीं पता कि मुझे अभी तक दूसरों पर टिप्पणी करने का अधिकार है। – sakumatto

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