2016-08-09 16 views
0

ich diese Störung erhalte den Rahmen der Sammlung Ansicht (summaryView) in dieser MethodeWas ist die Ursache für NSInternalInconsistencyException und wie kann sie gelöst werden?

- (void)configureSubviews{ 

    _close.frame = CGRectMake(rect.origin.x, 10 , 51, 35); 

    [_close setBackgroundImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateNormal]; 

    [_close setBackgroundImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateSelected]; 

    [_close setBackgroundImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateHighlighted]; 

    [_close addTarget:self action:@selector(closeDetailView:) forControlEvents:UIControlEventTouchUpInside]; 

    [self addSubview:_close]; 

    _dragger.frame = CGRectMake((rect.size.width-35)/2, 28, 23, 10); 

    _dragger.image = [UIImage imageNamed:@"summary_dragger_portrait.png"]; 

    _draggerView.frame = CGRectMake(0, 0, rect.size.width, 40); 

    _contentView.frame = CGRectMake(0, 13, rect.size.width, rect.size.height); 

    [_summaryView.collectionViewLayout invalidateLayout]; 

    _summaryView.frame = CGRectMake(0, 50, rect.size.width, rect.size.height-93);// exception occurs on this line 

    _borderView.frame = CGRectMake(0, 36, rect.size.width, 0.5); 

    actionX = rect.size.width-41; 

} 

Ausnahme zum Zurücksetzen:

MyApp [2585: 728.612] * Assertionsfehler in - [ UICollectionViewData validateLayoutInRect:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.12/UICollectionViewData.m:408 2016-08-11 11: 22: 05.175 MyApp [2585: 728612] * App beenden aufgrund von Uncaught-Ausnahme 'NSInternalInconsistencyException', Grund: 'Layout Attribute für Zusatzelement bei Indexpfad ({Länge = 2, Pfad = 0 - 0}) geändert von Indexpfad: ({Länge = 2, Pfad = 0 - 0}); Elementtyp: (SummarySuppView); Rahmen = (6 0; 743 65); zIndex = -1; zu Indexpfad: ({Länge = 2, Pfad = 0 - 0}); Elementtyp: (SummarySuppView); Rahmen = (6 0; 743 65); zIndex = -1; ohne wird das Layout‘ungültig gemacht

Diese Methode von Animationsblock

UIView transitionWithView:self.view duration:0.15 
         options:  (UIViewAnimationOptions)UIViewAnimationTransitionCurlUp 
        animations:^ { 
         [self layoutDataViewsForSize:listSize]; 
         [self layoutSummaryViewsForSize:summarySize]; 

         [_summaryView layoutSubviews]; // method call 
        } 
        completion:^(BOOL finished){ 
         if (_filterActions.alpha==0) { 
          _filterActions.alpha= 1.0f; 
         } 
        }]; 

Antwort

0

Das ist genannt, weil Sie das Layout ändern und nicht in allen Ansichten in sie ungültig nennen. Versuchen Super in layoutSubviews zu nennen, es

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    ...your code 
} 
0

diese

hinzufügen kann helfen
- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 
    [viewCollection.collectionViewLayout invalidateLayout]; 
} 
+0

Bitte beachten Sie die jüngste edits.That Methodenname für das verwirrend, sorry war. Ich habe bereits das Layout ungültig gemacht "[_summaryView.collectionViewLayout invalidateLayout];" – Ganesh

+0

Fügen Sie den Code hinzu, den Sie für die Anzahl der Abschnitte verwenden, und wie machen Sie die UICollectionView-Zellen, und Sie verwenden etwas als SummarySuppView – gurmandeep