2017-03-17 5 views
0

Ich füge eine Subview zu einer UICollectionViewCell hinzu. Ich füge programmatisch Beschränkungen hinzu, um es die Zelle zu füllen, jedoch füllt die Breite die Zelle nicht.Subview Breite passt nicht superview mit Autolayout

Wenn ich es in der Ansicht Debugger anzeigen, sagt es die Position ist mehrdeutig. Wie kann das sein, da ich alle 4 Seiten an die Superview angeheftet habe?

So sehen die Ansichten im Debugger aus. Die innere, Weiß-Sicht sollten die Eltern passen Breite (blau umrandet):

enter image description here

Inspizieren die Einschränkungen auf der übergeordneten Ansicht zeigt dies mit der „Position mehrdeutig“ Warnung:

enter image description here

Der Code, den ich verwende, ist wie folgt:

[self.contentView addSubview:calloutView]; 
calloutView.translatesAutoresizingMaskIntoConstraints = NO; 
self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[calloutView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(calloutView) ]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[calloutView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(calloutView) ]]; 
+0

Wo verwendest du diesen Code? –

+0

UICollectionViewDelegate erstellt eine Zelle und ruft dann die Zellen-Setup-Methode auf, die diesen Code – zorro2b

+0

enthält, aber dieser Code befindet sich in Ihrer Zelle oder in Ihrem ViewController? –

Antwort

1

Das Problem scheint mit der Verwendung verbunden zu sein von content, müssen Sie die Zelle selbst verwenden, um zu erreichen, was Sie wollen, ist dies der Code und funktioniert, überprüfen Sie das Bild unten

#import "CollectionViewCell.h" 

@interface CollectionViewCell() 
@property UIView * testView; 
@end 


@implementation CollectionViewCell 

@synthesize testView; 

-(void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    testView = [[UIView alloc]initWithFrame:CGRectZero]; 
    testView.translatesAutoresizingMaskIntoConstraints = NO; 

    [self addSubview:testView]; 

    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-2-[testView]-2-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(testView) ]]; 
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-2-[testView]-2-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(testView) ]]; 

    self.testView.layer.borderWidth = 2; 
    self.testView.layer.borderColor = [UIColor blueColor].CGColor; 
} 

@end 

enter image description here

Ich hoffe, das hilft Ihnen, beste Grüße

+0

Danke dafür. Hast du das Problem reproduziert, wenn du contentView benutzt? Ich habe es gerade entfernt und sehe keine Änderung :( – zorro2b

+0

@ zorro2b Ich poste die Antwort für Ihr Problem, ja ich reproduzieren Ihr Problem, und die Lösung ist dies, verwenden Sie die Zelle selbst anstelle von contentView für fügen Sie Ihre Code-erstellte Ansicht und Setup Ihre Einschränkungen dort, wie mein Code zeigt, funktioniert es !, mit freundlichen Grüßen –

+0

@ zorro2b hat meine Antwort schließlich hilft Ihnen? –

Verwandte Themen