2016-03-31 9 views
0

Ich bin neu in iOS. Ich mache eine Chat-Anwendung. Das Bild unten ist die Tabellennachricht. In jeder Zelle, habe ich 4 Ecken für messageView und es richtigEcke von UIBezierPath für flexible Ansicht (Ansicht kann Breite Höhe nach Inhalt erhöhen)

self.messageView.layer.cornerRadius = 10.0; 

enter image description here

Jetzt angezeigt, möchte ich einige nur meine Nachricht 3 Eckbälle (oben links, unten links, unten rechts) und einige Nachricht haben 3 Ecken (unten links, unten rechts, oben rechts) - wie Facebook Messenger
so ich Benutzer UIBezierPath für jede Zelle.
Aber meine Nachricht zeigt nicht den vollen Inhalt. Wenn ich jedoch nach oben/unten scrolle, wird die Zelle neu erstellt und angezeigt.

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.messageView.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)]; 

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
maskLayer.frame = self.bounds; 
maskLayer.path = maskPath.CGPath; 
self.messageView.layer.mask = maskLayer; 

denke ich, mein Problem ist: Als ich den conners für meine self.messageView von UIBezierPath gesetzt, die self.messageView fertig noch nicht ziehen. so self.messageView.bounds geben falschen Wert zurück.
Aber ich weiß nicht, wie ich es beheben soll.

Jede Hilfe wäre diese geschätzte

+0

Haben Sie 'sizeToFit' probiert? – schmidt9

+0

@schmidt9 bitte führe mich, wo ich das 'sizeToFit' setzen soll? –

+0

Bitte lesen Sie https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#/apple_ref/occ/instm/UIView/sizeToFit – schmidt9

Antwort

1

Es scheint nicht, dass man den Mann im -layoutSubviews Verfahren aktualisieren.
Die hinzugefügte Ebene weiß nicht, wie Sie mit Ihrer Ansicht umgehen sollen. Daher müssen Sie ihre Größe in layoutSubviews der Ansicht ändern, in der sie angewendet wird.
Behalten Sie einen Verweis auf den Maskenpfad und aktualisieren Sie ihn, rufen Sie immer vorher super auf.

+0

danke. Ich löse es, indem ich die Ecke in 'layoutSubView' aktualisiere –

1

Versuchen groß sein !!!

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.messageView.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)]; 

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
    // maskLayer.frame = self.bounds; 

    maskLayer.frame = self.messageView.bounds; // Try this. 
    maskLayer.path = maskPath.CGPath; 
    self.messageView.layer.mask = maskLayer; 

enter image description here enter image description here

+0

danke. Ich habe es versucht, aber das gleiche Problem –

+0

Ich habe es versucht. es funktioniert gut .. füge das hinzu. [self setNeedsDisplay]; –

+0

mein Problem ist in der Tabelle Tabellenansicht, und die Zelle kann die Höhe erhöhen. In Ihrem Bild ist Ihre Ansichtshöhe fest –

Verwandte Themen