Ich habe ein seltsames Problem. Ich habe eine Tabellenansicht und die Zellen enthalten ein Video. Ich habe die AVPlayerLayer so eingestellt, dass sie sich auf die Größe der Zelle ausdehnt, aber wenn die Tabellenansicht zuerst geladen wird, macht sie das nicht, nur für die ersten 2 Zellen. Für Zellen 3 + lädt es korrekt, und wenn ich die Tabellenansicht von unten nach oben zurückscrolle, werden die Zellen für die ersten 2 korrekt geladen. Ich habe ein 13 Sekunden langes Youtube-Video erstellt, um genau zu zeigen, was ich meine. Beachten Sie den Leerraum am unteren Rand der ersten beiden Zellen während der ersten Sekunden des Videos. Wenn ich zurück scrolle, ist dieser Raum nicht da, die Grenzen der AVPlayerLayer sind korrekt.AVPlayerLayer setzt nur korrekt auf Grenzen ändern
https://www.youtube.com/watch?v=q7BlZd77QVU
Hier ist mein Code, der die Tableview Zelle, in cellForRowAtIndexPath aufstellt:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *mov = @".mov";
NSString *fullComponent = [NSString stringWithFormat: @"%@%@", self.videoChallengeID, mov];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:fullComponent];
NSURL *url = [NSURL fileURLWithPath:fullPath];
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, videoCell.frame.size.width, videoCell.frame.size.height)];
blueView.backgroundColor = [UIColor blueColor];
[videoCell.contentView insertSubview:blueView belowSubview:videoCell.bottomView];
videoCell.item = [AVPlayerItem playerItemWithURL:url];
self.player = [[AVPlayer alloc] initWithPlayerItem:videoCell.item];
[self.player setMuted:YES];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
playerLayer.frame = CGRectMake(0, 0, videoCell.frame.size.width, videoCell.frame.size.height);
playerLayer.backgroundColor = [UIColor lightGrayColor].CGColor;
playerLayer.videoGravity = AVLayerVideoGravityResize;
[blueView.layer addSublayer:playerLayer];
[self.player play];
ich deutlich den Rahmen richtig eingestellt, und es funktioniert, mit Ausnahme der ersten 2-Zellen, die Last, Beim ersten Laden der Tabellenansicht. Jedes andere Mal funktioniert es richtig. Irgendeine Idee was könnte los sein?
Da das erste Mal, wenn die Zelle instanziiert wird, wobei der Rahmen der Zelle selbst nicht ist stellen Sie auf, was es sein sollte. Wenn sie wiederverwendet werden, ist es in Ordnung, aber nicht, wenn sie zuerst instanziiert werden. Was Sie tun sollten, ist eine benutzerdefinierte UItableViewCell-Unterklasse erstellt, und stellen Sie den Rahmen der Video-Ebene richtig in der Funktion "layoutSubviews" –
setzen Sie dies als eine Antwort, und ich werde es richtig markieren. Vielen Dank! – joey
Fertig, danke –