2016-07-20 13 views
8

का उपयोग कर अंदरूनी सामग्री के आधार पर UIScrollView का दृश्य मुझे वास्तव में केवल स्टोरीबोर्ड बाधाओं का उपयोग करके पूरी तरह उत्तरदायी बनाने में कठिनाइयों का सामना करना पड़ रहा हैसामग्री की ऊँचाई स्टोरीबोर्ड

> - UIViewController 
> - UIView 
> - UIScrollView 
> - contentView 
>  - module1View 
>  - module2View 
>  - module3View 

सभी मॉड्यूल चार्ट प्रदर्शित करने के लिए उपयोग किया जाता है:

यहाँ मेरी पदानुक्रम है। मैं उन्हें उत्तरदायी होना चाहता हूं। मैं चाहता हूं कि उनकी चौड़ाई स्क्रीन का 100% हो और उनकी ऊंचाई को अनुपात द्वारा बाधा का उपयोग करके जोड़ा गया है। मॉड्यूल एक दूसरे के बगल में प्रदर्शित होते हैं जैसे समाचार पत्र में समाचार।

मेरा प्रश्न है: आप contentView ऊंचाई को सभी मॉड्यूल (मॉड्यूल 1 + 2 + 3) के योग के बराबर कैसे सेट करते हैं?

दूसरे शब्दों में मैं हासिल करना चाहते हैं: contentView = मॉड्यूल के शीर्ष के

  • शीर्ष 1
  • मॉड्यूल 2 के शीर्ष = मॉडयूल के तल 1
  • मॉड्यूल 2 = के नीचे का शीर्ष मॉड्यूल 2
  • contentView = मॉड्यूल 3
के नीचे के नीचे

ऐसा करने में कामयाब रहा मैं इंटरनेट पर कुछ ट्यूटोरियल का पालन करता हूं।

  1. अपने जगह और स्थिति परिभाषित करने के लिए UIScrollView contraints स्थापना: ये कदम उठाएँ मैं पीछा कर रहे हैं।
  2. स्थापना UIScrollViewशीर्ष, नीचे, और सही रिक्ति निकटतम पड़ोसी के लिए छोड़ दिया है।
  3. बाधा मॉड्यूल के बीच उन्हें "स्टैक" करने के लिए अन्य पर सेट करना।
  4. (मैं यहां अवरोधित हूँ) मॉड्यूल 3 की नीचे करने के लिए contentView के नीचे स्थापना UIScrollview अंत सामग्री तक स्क्रॉल करने के लिए अनुमति देने के लिए।

मैंने UIScrollView की ऊंचाई को मजबूर करने की कोशिश की: यह काम करता है लेकिन यह उत्तरदायी नहीं है। चूंकि मॉड्यूल की ऊंचाई को अनुपात के आधार पर गणना की जाती है, डिवाइस के आधार पर, ऊंचाई के दौरान "मॉड्यूल 1 + 2 + 3" ऊंचाई।

मैंने मॉड्यूल 3 से contentView से मॉड्यूल 3 = contentView के नीचे सेट करने के लिए एक बाधा जोड़ने की कोशिश की। सभी बाधाओं हर जगह चेतावनी के साथ लाल हो जाते हैं।

क्या आपको कोई उत्तरदायी सामग्री के आधार पर contentView की ऊंचाई सेट करने का कोई विचार है? (जैसे "एक तरह से लपेटें सामग्री)।

आपकी मदद के लिए अग्रिम धन्यवाद!

+0

एक बार जब आप अपने अनुपात के आधार पर मॉड्यूल की ऊंचाई निर्धारित करते हैं, तो आप सामग्री के लिए ऊंचाई की गणना करने में सक्षम होना चाहिए –

+0

मैंने जोड़ने की कोशिश की: 'mainContentView.frame = CGRectMake (0, 0, self.view। चौड़ाई, मॉड्यूल 1View.height + module2View.height + module3View.height); 'ViewDidLoad और viewWillAppear में, उनमें से कोई भी –

+0

काम करता है जब आप मॉड्यूल के फ्रेम को सेट करते हैं? मॉड्यूल फ्रेम सेट होने के बाद आपको mainContentView फ्रेम सेट करने की आवश्यकता है ... मॉड्यूल किस प्रकार का ऑब्जेक्ट है? –

उत्तर

31

मैं गतिशील स्क्रॉल स्टोरीबोर्ड, कोई कोड से पूरी तरह से काम कर रहे दृश्य, निम्न चरणों के साथ प्राप्त करने में सक्षम किया गया है मुख्य दृश्य के किनारों या किसी भी तरह से उपयुक्त

2) स्क्रॉल व्यू के अंदर, एक कंटेनर के रूप में एक सादे पुराने UIView जोड़ें। पुस्तक को देखने के लिए सभी 4 किनारों को यह विवश है, लेकिन यह भी दृश्य स्क्रॉल करने के लिए एक समान चौड़ाई बाधा रिश्तेदार जोड़ सकते हैं और एक बराबर ऊंचाई पुस्तक को देखने के लिए बाधा

3) बहुत महत्वपूर्ण: के लिए एक कम प्राथमिकता सेट बराबर ऊंचाई बाधा, उदाहरण के लिए 250.

4) चरण 2 में जोड़े गए कंटेनर दृश्य के अंदर, अपने 3 मॉड्यूल जोड़ें। कंटेनर व्यू के शीर्ष पर पहले मॉड्यूल के शीर्ष किनारे को बाधित करें, कंटेनर व्यू के निचले हिस्से में अंतिम मॉड्यूल के निचले किनारे को बाधित करें, और श्रृंखला में पिछले मॉड्यूल में सभी मॉड्यूल के बीच में बाधा डालें। यह आपको कंटेनर व्यू के अंदर अखंड लंबवत बाधाओं की अपनी श्रृंखला देनी चाहिए। आपको प्रत्येक मॉड्यूल में जो भी उचित x पोजिशनिंग/चौड़ाई सेटिंग बाधाओं को जोड़ने की आवश्यकता होगी।

5) बनाएं और चलाएं! आपका स्क्रॉल व्यू सामग्री का आकार स्वचालित रूप से सभी मॉड्यूल की कुल ऊंचाई के बराबर होना चाहिए और उनके बीच की दूरी, और मॉड्यूल सामग्री को गतिशील रूप से बदलना, गणना के लिए स्पष्ट कोड की आवश्यकता के बजाय ऑटो लेआउट के माध्यम से स्क्रॉल व्यू सामग्री आकार को अपडेट करेगा।

+0

समान ऊंचाई बाधा के लिए कम प्राथमिकता चाल थी! आपका बहुत बहुत धन्यवाद! – karenms

+2

आपने दिन धन्यवाद बचाया! –

+0

मैं थोड़ी देर के लिए स्क्रॉलव्यू का उपयोग कर रहा हूं लेकिन बिंदु 3 के बारे में नहीं पता था। बहुत बहुत धन्यवाद। – Ankit

0

मॉड्यूल रनटाइम की ऊंचाई को परिभाषित करने का प्रयास करें और प्रोग्रामेटिक रूप से मॉड्यूल के लिए ऑटो लेआउट बाधा जोड़ें। करने के लिए,

1) स्टोरीबोर्ड में एक स्क्रॉल दृश्य जोड़ सकते हैं और अपने किनारों विवश:

#define kDeviceHeight     [UIScreen mainScreen].bounds.size.height 
#define kDeviceWidth     [UIScreen mainScreen].bounds.size.width 

    - (void)viewDidLoad { 

     [super viewDidLoad]; 
     [self setScrollViewHeight]; 

    } 

    -(void)setScrollViewHeight{ 

     float module1_Height,module2_Height,module3_Height;// Calculate the height of modules over here and assign it to respective variables 
     float viewVerticalSpacing = 5; // Provides space between two views 
     float YAxis = 0; 
     module1View.frame = CGRectMake(0, 0, kDeviceWidth, module1_Height); 

     YAxis = YAxis + module1_Height + viewVerticalSpacing; 
     module2View.frame = CGRectMake(0, YAxis, kDeviceWidth, module2_Height); 

     YAxis = YAxis + module2_Height + viewVerticalSpacing; 
     module3View.frame = CGRectMake(0, YAxis, kDeviceWidth, module3_Height); 

     float scrollView_height = YAxis + module3_Height + viewVerticalSpacing; 
     scroll_view.contentSize = CGSizeMake(kDeviceWidth, scrollView_height); 
     scroll_view.frame = CGRectMake(0, 0, kDeviceWidth, kDeviceHeight); 
    } 
0

मेरे लिए, डैनियल का समाधान बहुत उपयोगी था लेकिन काम नहीं कर रहा था। यहाँ अद्यतन कदम हैं:

1) स्टोरीबोर्ड में, मुख्य देखने की या जो कुछ भी तरह से किनारों पर स्क्रॉल दृश्य जोड़ सकते हैं और अपने किनारों विवश उचित

2) पुस्तक दृश्य के अंदर है, जोड़ने एक कंटेनर के रूप में एक सादा पुराना UIView। पुस्तक को देखने के लिए सभी 4 किनारों को यह विवश है, लेकिन यह भी देखने की माता पिता (उच्चतम देखें) स्क्रॉल करने के लिए एक समान चौड़ाई बाधा रिश्तेदार, और एक समान ऊंचाई बाधा स्क्रॉल दृश्य की माता-पिता के लिए जोड़

3) बहुत महत्वपूर्ण : समान ऊंचाई बाधा के लिए कम प्राथमिकता निर्धारित करें, उदाहरण के लिए 250.

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