2013-03-12 18 views
5

का उपयोग कर एनएससीएलआईपी व्यू/एनएसएसक्रॉल व्यू के अंदर एनएसटीबल व्यू का फ्रेम ऑटो लेआउट का उपयोग करके NSScrollView (मानक कॉन्फ़िगरेशन, जो है) के अंदर NSTableView बनाने का प्रयास कर रहा हूं। मैं यह नहीं समझ सकता कि यह काम कैसे करें।ऑटो लेआउट

यहाँ मेरी loadView है:

- (void)loadView 
{ 
    NSView *view = [[NSView alloc] init]; 

    NSScrollView *tableScroll = [[NSScrollView alloc] init]; 
    NSTableView *fileTable = [[NSTableView alloc] init]; 
    [tableScroll setDocumentView:fileTable]; 
    [tableScroll setHasVerticalScroller:YES]; 
    [tableScroll setHasHorizontalScroller:NO]; 
    fileTable.delegate = self; 
    fileTable.dataSource = self; 
    [fileTable setHeaderView:nil]; 
    [fileTable setAllowsColumnReordering:NO]; 

    NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column1"]; 
    [fileTable addTableColumn:column]; 

    [tableScroll setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [fileTable setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [view addSubview:tableScroll]; 

    NSDictionary *topViews = NSDictionaryOfVariableBindings(tableScroll); 
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableScroll]|" options:0 metrics:nil views:topViews]]; 
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[tableScroll]|" options:0 metrics:nil views:topViews]]; 

    self.fileTable = fileTable; 

    self.view = view; 
} 

क्या होता है कि मेरी तालिका दृश्य के फ्रेम हमेशा NSClipView की सीमा के बराबर हो जाएगा है। दृश्य एक खिड़की के अंदर है और इसके साथ आकार बदल जाता है, और जब मैं ऐसा करता हूं तो यह स्क्रॉलव्यू, क्लिप व्यू और टेबल का आकार बदल देगा, लेकिन मैं कहीं भी स्क्रॉल नहीं कर सकता।

की कमी मैं को देखते हुए, NSScrollView की कमी है कि क्लिप को देखने इसे भरने के लिए सेट हो जाता है, क्लिप दृश्य सभी में कोई कमी है और तालिका दृश्य NSTableRowViews इसके अंदर से संबंधित बाधाओं का एक समूह है।

यदि मैं क्लिप दृश्य में |[fileTable(>=500)] जैसी बाधा डालता हूं तो मुझे 500 पिक्सेल एनएसटीबल व्यू मिलेगा, लेकिन जाहिर है कि मैं ऐसा नहीं करना चाहता हूं।

+0

मैं 'tableScroll' के लिए मुखौटा autoresizing सेट करते हैं, कहते हैं' setTranslatesAutoresizingMaskIntoConstraints: 'tableScroll' और' fileTable' पर YES' और निकालने के दो 'addConstraints', कॉल यह ठीक काम करता है और मैं' NSAutoresizingMaskLayoutConstraint' क्लिप देखने पर लगता है कि सही आकार 'फ़ाइलटेबल' जरूरतों को निर्दिष्ट करें। –

उत्तर

1

हालांकि ऊपर दिए गए टिप्पणियों में पोस्टर द्वारा इसका उत्तर दिया गया था, मैंने सोचा कि मैं यहां जवाब डालूंगा (एक ही मुद्दे में भाग लेना)। यदि आप ऑटो लेआउट को अपनाते हैं, तो आप आमतौर पर xib में "बाधाओं में मास्क अनुवाद" अनचेक करेंगे। हालांकि, NSScrollView और NSTableView जैसी कक्षाओं के लिए, आपको आम तौर पर उन्हें translatesAutoresizingMaskIntoConstraints संपत्ति YES पर सेट करके अपने आंतरिक विचारों को प्रबंधित करने देना चाहिए। इन विचारों के लिए बाहरी ऐसी बाधाओं को सेट करना अभी भी ठीक है, यानी उनके पर्यवेक्षण के संबंध में आकार बदलने के लिए।

यदि आप translatesAutoresizingMaskIntoConstraints से NO पर सेट करते हैं, तो आपको सभी आंतरिक विचारों के लिए बाधाओं की आपूर्ति करने की आवश्यकता होगी, जब तक कि आपको विशेष रूप से कस्टम व्यवहार (लगभग कभी नहीं) की आवश्यकता न हो, आप नहीं करना चाहेंगे। यह उपरोक्त विशिष्ट समस्या थी।

यह सही ढंग से सेट न करने का एक स्पष्ट साइड इफेक्ट यह है कि एक तालिका (उदाहरण के लिए) दृश्य में दिखाई देने से परे ठीक से स्क्रॉल नहीं करेगी।

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