2015-05-19 6 views
5

मैं ओएस एक्स कोको विकास के लिए नया हूं और योसामेट के लिए स्टोरीबोर्ड का उपयोग कर एक स्विफ्ट ऐप पर काम कर रहा हूं।ऑटो लेआउट का उपयोग कर न्यूनतम और प्रारंभिक चौड़ाई NSSplitView पैनल कैसे सेट करें?

मेरे आवेदन की मुख्य विंडो में, मेरे पास एक NSSplitViewController है। प्रत्येक पैनल के लिए, बाएं और दाएं, मैंने रूट कस्टम व्यू जोड़ा जिसमें सभी सबव्यूव होंगे।

Storyboard Layout

ऑटो लेआउट का उपयोग करना, मैं स्प्लिट दृश्य में देखें के किनारों से कस्टम दृश्य पिन किया हुआ है और यह भी से अधिक होना कस्टम दृश्य की चौड़ाई के लिए एक बाधा को परिभाषित किया है या एक के बराबर न्यूनतम संख्या

Autolayout Constraints

यह सब ठीक काम करता है। जब खिड़की खुलती है, तो विंडो चौड़ाई दो पैनलों की न्यूनतम चौड़ाई बाधाओं का योग होता है। जो मैं समझ नहीं सकता वह अगला कदम है।

मैं कस्टम दृश्य को एक और चौड़ाई बाधा कैसे देता हूं ताकि जब खिड़की खुलती है, तो प्रारंभिक चौड़ाई न्यूनतम से अधिक है (300 कहें)? मैं चाहता हूं कि पैनल 200 के रूप में छोटे होने में सक्षम हो, लेकिन मैं चाहता हूं कि प्रारंभिक आकार 300 हो। मैं नहीं चाहता कि विंडो छोटी छोटी चौड़ाई पर खुल जाए। फिर उपयोगकर्ता को हर बार इसका आकार बदलना होगा और यह एक अच्छा उपयोगकर्ता अनुभव नहीं होगा।

इसे करने और इसे पूरा करने के लिए, मैंने कस्टम प्राथमिकता के लिए 300 के लिए एक और चौड़ाई बाधा जोड़ा (सभी अलग-अलग मान 200, 500, 800 इत्यादि का प्रयास किया) लेकिन उनमें से कोई भी मुझे वांछित परिणाम नहीं देता चौड़ाई मूल्य जा रहा है 300 और पैनल 200.

Revised Autolayout constraints

की एक न्यूनतम चौड़ाई वहाँ यह पूरा करने के लिए एक तरह से हो गया है हो रही है, लेकिन मैं तो बस पर कैसे स्टम्प्ड रहा हूँ। कृपया सहायता कीजिए!

अद्यतन

यहाँ NSSplitViewController के नजरिए के constraintsAffectingLayoutForOrientation से उत्पादन होता है:

<NSLayoutConstraint:0x6000000923e0 H:|-(0)-[NSView:0x600000124c40] (Names: '|':NSView:0x600000124ba0)>, 
<NSLayoutConstraint:0x6000000924d0 H:[NSView:0x600000124c40]-(0)-| (Names: '|':NSView:0x600000124ba0)>, 
<NSLayoutConstraint:0x600000092070 H:[NSView:0x600000124c40(>=200)]>, 
<NSLayoutConstraint:0x600000092660 _NSSplitViewItemViewWrapper:0x6000001416b0.width == NSView:0x600000124ba0.width>, 
<NSLayoutConstraint:0x600000093a10 H:|-(0)-[_NSSplitViewItemViewWrapper:0x6000001416b0](LTR) (Names: '|':NSSplitView:0x608000123b60)>, 
<NSLayoutConstraint:0x600000093b50 H:[_NSSplitViewItemViewWrapper:0x6000001416b0]-(1)-[_NSSplitViewItemViewWrapper:0x6000001429f0](LTR)>, 
<NSAutoresizingMaskLayoutConstraint:0x600000093d80 h=-&- v=-&- H:[NSSplitView:0x608000123b60]-(0)-| (Names: '|':NSView:0x6000001242e0)>, 
<NSAutoresizingMaskLayoutConstraint:0x600000093b00 h=-&- v=-&- H:|-(0)-[NSSplitView:0x608000123b60] (Names: '|':NSView:0x6000001242e0)>, 
<NSAutoresizingMaskLayoutConstraint:0x600000094050 h=-&- v=-&- H:|-(0)-[NSView:0x6000001242e0] (Names: '|':NSThemeFrame:0x100940be0'Main Window')>, 
<NSLayoutConstraint:0x600000093c40 H:[_NSSplitViewItemViewWrapper:0x6000001429f0]-(0)-|(LTR) (Names: '|':NSSplitView:0x608000123b60)>, 
<NSLayoutConstraint:0x600000092890 H:[NSView:0x600000124f60]-(0)-| (Names: '|':NSView:0x600000124ec0)>, 
<NSLayoutConstraint:0x6000000926b0 H:[NSView:0x600000124f60(>=400)]>, 
<NSLayoutConstraint:0x608000099d20 _NSSplitViewItemViewWrapper:0x6000001429f0.width == NSView:0x600000124ec0.width>, 
<NSLayoutConstraint:0x600000092840 H:|-(0)-[NSView:0x600000124f60] (Names: '|':NSView:0x600000124ec0)>] 
के माध्यम से सॉर्ट करने के लिए की कमी की बड़ी संख्या की वजह से

, मैं एक ब्रांड के नए परीक्षण परियोजना बनाने का फैसला किया और देखें कि यह बॉक्स से बाहर होता है या यह कुछ सेटिंग थी जिसे मैंने अपने आवेदन में बदल दिया था। परीक्षण प्रोजेक्ट में मैंने अभी व्यू कंट्रोलर को हटा दिया है, विंडो में स्प्लिट व्यू कंट्रोलर जोड़ा है और बस प्रत्येक पैनल में दो साधारण टेक्स्ट व्यू जोड़े हैं। फिर प्रोजेक्ट चलाते हुए, बाएं हाथ के पैनल को ध्वस्त कर दिया गया। तो मैंने प्रत्येक पाठ दृश्य में न्यूनतम चौड़ाई बाधा जोड़ा और फिर परीक्षण परियोजना में भी यही बात हुई। कोई फर्क नहीं पड़ता कि मैंने इसे स्टोरीबोर्ड में क्या सेट किया है, विंडो का आकार न्यूनतम चौड़ाई के अतिरिक्त है। शायद इसे पाने का एकमात्र तरीका कोड में खिड़की/विभाजित दृश्य आकार सेट करना है।

उत्तर

6

आपको इसे मजबूर करने के लिए अतिरिक्त बाधाओं को जोड़ना नहीं चाहिए। विंडो डिफ़ॉल्ट रूप से, स्टोरीबोर्ड में आकार के साथ कॉन्फ़िगर किया जाएगा। यदि यह छोटा हो रहा है, तो इससे पता चलता है कि ऐसी बाधाएं हैं जो इसे कम कर रही हैं।

एक विंडो प्राथमिकता 500 (NSLayoutPriorityWindowSizeStayPut) पर अपना आकार बनाए रखेगी। उच्च प्राथमिकता की बाधा इसे एक अलग आकार में धक्का या खींच सकती है। खिड़की के वर्तमान आकार से कम प्राथमिकता बाधाओं को ओवरराइड कर दिया जाएगा।

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

[someView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal] लॉग इन करना संभवतः उपयोगी डायग्नोस्टिक तकनीक है। आप विंडो के contentView या स्प्लिट व्यू के लिए ऐसा कर सकते हैं।

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