2016-09-13 12 views
5

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

निम्नलिखित कोड को लाल दृश्य (एक दृश्य) के साथ एक दृश्य बनाना चाहिए जो उसके 'सुपर व्यू के किनारों के पास है, लेकिन उन्हें छूना नहीं है।

let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50)) 
sqv.backgroundColor = .red 
v.addSubview(sqv) 
PlaygroundPage.current.liveView = v 

परिणाम नहीं है कि तुम क्या उम्मीद थी:

enter image description here

मुझे लगता है मुझे पता है कि यहाँ पर जा रहा है; लाइव व्यू एक निश्चित आकार पर हैं जो प्रदर्शन क्षेत्र से बड़ा है। दृश्य की कुछ विशेषताओं को अनदेखा किया जाता है जब यह लाइव व्यू के रूप में कार्य कर रहा है। हालांकि, मुझे यह नहीं पता कि दस्तावेज़ में यह कहां उल्लेख किया गया है, जो मुझे परेशान करता है। सबसे महत्वपूर्ण बात यह है कि मैं इससे कैसे निपटूं? मैं लेआउट सरल यूआई को सक्षम करने में सक्षम होना चाहता हूं जो लाइव व्यू के वर्तमान आकार में फिट हो जाते हैं। मुझे नहीं पता कि परीक्षण के बिना इस समस्या को कैसे हल किया जाए & त्रुटि और हार्डकोडिंग, जो दो चीजें हैं जिन्हें मैं वास्तव में टालना चाहूंगा।

उत्तर

0
let sqv = UIView(frame: CGRect(x: UIScreen.mainScreen().bounds.width-50-1, y:400, width: 50, height: 50)) 

उपर्युक्त कोड मुख्य दृश्य के दाईं ओर से आपके सबव्यू 1 बिंदु को दूर रखता है। वांछित मूल्य पर x में 50 के बाद मान 1 को बदलने का प्रयास करें।

+1

कि काम करने के लिए प्रतीत नहीं होता। क्या आप वाकई खेल के मैदानों में लाइव विचारों के बारे में बात कर रहे हैं? मैंने UIScreen.main.bounds मुद्रित किए और यह 1024w, 768h जैसा था जो दृश्य क्षेत्र की तुलना में बहुत बड़ा है। – PopKernel

+0

आप सुपर व्यू निर्देशांक भी प्राप्त कर सकते हैं और सुपर व्यू के संदर्भ में अपना सबव्यूव्यू डाल सकते हैं। sqv = UIView (फ्रेम: CGRect (x: v.frame.origin.x + 1, y: 400, चौड़ाई: 50, ऊंचाई: 50)) – phamot

4

मुझे संदेह है कि मुझे पता है कि यहां क्या हो रहा है; लाइव व्यू एक निश्चित आकार पर हैं जो प्रदर्शन क्षेत्र से बड़ा है।

असल में यह दूसरी तरफ की तरह है। एक आईपैड स्क्रीन 1024 अंक चौड़ी है (लैंडस्केप ओरिएंटेशन में)। दाएं हाथ के फलक (जहां यह आपका लाइव व्यू दिखाता है) 512 अंक चौड़ा है। खेल का मैदान उस रूट को भरने के लिए आपके मूल दृश्य (v) को बाध्य करता है, बाएं, दाएं, और ऊपर (और नीचे और अधिक) पर 40 अंक से इन्सेट करें। इसलिए आपके रूट व्यू की चौड़ाई को आपके द्वारा निर्दिष्ट 500 से कम 432 (= 512 - 2 * 40) तक मजबूर किया गया है।

कोड (जैसे आपके) में बनाए गए दृश्य translatesAutoresizingMaskIntoConstraints = true हैं, और 0 का आकार बदलने वाला मुखौटा है, जिसका अर्थ है कि उसके माता-पिता का आकार बदलने पर व्यू के फ्रेम को समायोजित न करें। तो खेल का मैदान चौड़ाई 432 पर आपके रूट व्यू का आकार बदलता है, लेकिन आपका रूट व्यू इसके सबव्यूव (sqv) को स्थानांतरित या आकार बदलता नहीं है।

सबसे आसान फिक्स सबव्यू के ऑटोरेसाइजिंग मास्क को सेट करना है ताकि यह आपके इरादे को व्यक्त किया जा सके कि यह रूट व्यू के दाएं और निचले किनारों के पास है। इसका मतलब है कि यह लचीला ऊपर और छोड़ दिया मार्जिन होना चाहिए:

let v = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
let sqv = UIView(frame: CGRect(x: 400, y: 400, width: 50, height: 50)) 
sqv.autoresizingMask = [.flexibleLeftMargin, .flexibleTopMargin] 
sqv.backgroundColor = .red 
v.addSubview(sqv) 
PlaygroundPage.current.liveView = v 

परिणाम:

enter image description here

+0

क्या होता है यदि मैं स्वचालित लेआउट उद्देश्यों के लिए अनुवाद करने के लिए ऑटोरोसिंगमास्क इन कोंस्ट्रेनट्स सेट करता हूं तो क्या होता है? – PopKernel

+0

यह पहले से ही 'सत्य' है क्योंकि यह कोड में बनाए गए दृश्य के लिए डिफ़ॉल्ट है। –

+0

मुझे पता है लेकिन काम करने के लिए ऑटो लेआउट प्राप्त करने के लिए मुझे अक्सर इसे गलत होने के लिए सेट करना पड़ता है। – PopKernel

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