2011-10-20 10 views
11

मुझे लगता है कि यह ऑटोराइजिंग मास्क के चारों ओर घूमने वाला एक साधारण उत्तर होगा, लेकिन मैं इस विषय के चारों ओर अपने सिर को लपेट नहीं सकता।ऑटो-रीसाइज यूआईटीबल व्यू हेडर ऑन रोटेट (अधिकतर आईपैड पर)

मुझे एक आईपैड ऐप मिला है जो 2 यूआईटीबल व्यू को साइड-साइड दिखाता है। जब मैं पोर्ट्रेट से लैंडस्केप तक और पीछे घुमाता हूं, तो UITableView में सेल्स पूरी तरह से आकार में बदलती हैं, जबकि घूर्णन होता है। मैं UITableViewCellStyleSubtitle UITableViewCells (अब के लिए नहीं subclassed) का उपयोग कर रहा है, और मैं UITableView शीर्ष करने के लिए लंगर डालना, नीचे के किनारों (बाएं UITableView के लिए) सेट कर दिया है आईबी में छोड़ दिया और और एक लचीला चौड़ाई है।

मैं के लिए

- (UIView *)tableView:(UITableView *)tableView 
    viewForHeaderInSection:(NSInteger)section 

यहाँ मेरे अपने UIView वस्तु की आपूर्ति हूँ मैं अब तक क्या मिल गया है (किसी अन्य वर्ग से एक वर्ग पद्धति के रूप में कहा जाता है):

+ (UIView *)headerForTableView:(UITableView *)tv 
{ 
    // The view to return 
    UIView *headerView = [[UIView alloc] 
     initWithFrame:CGRectMake(0, 0, [tv frame].size.width, someHeight)]; 

    [headerView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleLeftMargin | 
            UIViewAutoresizingFlexibleRightMargin]; 

    // Other layout logic... doesn't seem to be the culprit 

    // Return the HeaderView 
    return headerView; 
} 

तो, या तो अभिविन्यास, सब कुछ ठीक वैसे ही लोड होता है जैसा मैं चाहता हूं। रोटेशन के बाद, यदि मैं मैन्युअल रूप से रीलोडडाटा को कॉल करता हूं या जब तक मेरा ऐप ट्रिगर नहीं करता है, या UITableView को स्क्रॉल करें, तो हेडर व्यूज़ का आकार बदल जाएगा और स्वयं को ठीक से दिखाएगा। मैं यह नहीं समझ सकता कि AutoResizeMask प्रॉपर्टी को ठीक से कैसे सेट किया जाए ताकि हेडर सेल की तरह आकार बदल सके।

+0

यह अपने प्रश्न से मेरे लिए स्पष्ट नहीं है: मुद्दा यह है कि शीर्ष लेख 'चौड़ाई तालिका के साथ बदल रही हैं, कि आप अपनी ऊंचाइयों को बदलने की उम्मीद है, या उस परिवर्तन है कि हो एनिमेटेड नहीं किया जा रहा है टेबल के घूर्णन के साथ? –

+0

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

उत्तर

15

बहुत अच्छा तय नहीं है। लेकिन काम करता है:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    [mTableView reloadData]; 
} 
+1

यह सच है कि यह काम करेगा, लेकिन यह थोड़े क्लेगी है। – mbm29414

+0

एक आकर्षण की तरह काम करता है ... यह निजी एपीआई नहीं है? –

+0

यहां उपयोग की जाने वाली सभी विधियां सार्वजनिक हैं –

0

मैं इस के लिए एक असली जवाब पाने में खुशी होगी, लेकिन अब के लिए, मैं बस अपना UITableView फिर से काम किया है, ताकि मेरी "हेडर" बस तालिका के अंदर कोशिकाएं होती हैं। आकार बदलने का कोई तरीका नहीं है।

+0

मैं इस तरह की कोशिश की यहाँ स्विफ्ट में समाधान है। लेकिन यदि आपके पास एकाधिक सेल दृश्य और अनुभाग हैं तो कक्षों को नियंत्रित करना मुश्किल है। –

5

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

#import "TableSectionHeader.h" 

@implementation TableSectionHeader 

- (id)initWithFrame:(CGRect)frame title:(NSString *)title 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     self.backgroundColor = [UIColor clearColor]; 

     // Initialization code 
     headerLabel = [[UILabel alloc] initWithFrame:frame]; 
     headerLabel.text = title; 

     headerLabel.textColor = [UIColor blackColor]; 
     headerLabel.font = [UIFont boldSystemFontOfSize:17]; 
     headerLabel.backgroundColor = [UIColor clearColor]; 

     [self addSubview:headerLabel]; 
    } 
    return self; 
} 

-(void)dealloc { 

    [headerLabel release]; 

    [super dealloc]; 
} 

-(void)layoutSubviews { 

    [super layoutSubviews]; 

    NSInteger xOffset = ((55.0f/768.0f) * self.bounds.size.width); 

    if (xOffset > 55.0f) { 
     xOffset = 55.0f; 
    } 

    headerLabel.frame = CGRectMake(xOffset, 15, self.bounds.size.width - xOffset * 2, 20); 
} 

+(UIView *) tableSectionHeaderWithText:(NSString *) text bounds:(CGRect)bounds { 
    TableSectionHeader *header = [[[TableSectionHeader alloc] initWithFrame:CGRectMake(0, 0, bounds.size.width, 40) title:text] autorelease]; 
    return header; 
} 

+(CGFloat) tableSectionHeaderHeight { 
    return 40.0; 
} 
@end 
+0

लेआउटव्यूव्यूज़ ने काम किया – biorbnA

+0

@ वाशफाक उत्कृष्ट उत्तर।मतदान कर रहा है ... –

0

मैं UIView उपवर्ग जहाँ मैं दृश्य की कमी का उपयोग किया है स्क्रीन के पक्षों के लिए subview रहना बनाया है। और घूर्णन ठीक है।

class MLFlexibleView: UIView { 

override init(frame: CGRect) { 
    super.init(frame: frame) 

    self.addSubview(self.segmentedControl) 
    self.setUpConstraints() 
} 

func setUpConstraints() { 
    let views = ["view" : self.segmentedControl] 

    NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|-7-[view]-7-|", options: [], metrics: nil, views: views)) 
    NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|-15-[view]-15-|", options: [], metrics: nil, views: views)) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

let segmentedControl:UISegmentedControl = { 
    let segmentedControl = UISegmentedControl(items: ["Searches".localized, "Adverts".localized]) 
    segmentedControl.selectedSegmentIndex = 0 
    segmentedControl.tintColor = UIColor.white 
    segmentedControl.translatesAutoresizingMaskIntoConstraints = false 
    return segmentedControl 
}() 

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