2017-10-01 2 views
0

Ich versuche, rect Wert einer Klasse in ViewDidAppear abrufen. Die Schaltfläche befindet sich in UITableViewCell. Alle Werte sind korrekt, außer frame.origin.y. Es gibt -1,5 zurück. Ich frage mich, was das verursachen könnte.UIButton origin.y gibt den falschen Wert zurück

CGRect customRect = CGRectMake(self.favoriteButton.frame.origin.x, self.favoriteButton.frame.origin.y, self.favoriteButton.frame.size.height, self.favoriteButton.frame.size.width) ; 
+0

Wie wird der Rahmen von 'self.favoriteButton' gesetzt? Welchen Wert sollte das "Ursprung" haben? – rmaddy

+0

Es ist in Storyboard gesetzt. Es sollte wie 400 etwas sein. – birdcage

+0

Anruf [self.view layoutIfNeeded]; bevor Sie den CustomRect erhalten. Wenn Sie AutoLayouts –

Antwort

0

Es gibt zwei Dinge

1-) Sie sagten, dass es in TableViewCell ist, so dass es richtig zurückgibt. Da Sie die Schaltfläche in einer Ansicht (TableViewVell-Containeransicht) platzieren, erhält die Schaltfläche die Koordinaten aus der Containeransicht und nicht aus der Superview.

2-) Wenn TableViewCell groß genug ist, und beginnt von y = 0 und Sie sind sicher, dass es falsch ist, und 400 so etwas wie Try sein muss, den rect Wert bei viewDidLayoutSubviews

0

Origin.y definiert ist, zu erhalten in ein unintuitives.

Zuerst nach unten bewegt, ist positiv und bis negativ ist (auch bekannt als größere Zahlen bedeuten die Ansicht weiter unten auf dem Bildschirm angezeigt).

Zweitens ist der Ursprung relativ zu der oberen linken Ecke der unmittelbar übergeordneten Ansicht (in Ihrem Fall der Zelle). Wenn origin.y wirklich -1.5 ist, dann befindet sich der obere Teil der Schaltfläche nur anderthalb Punkte über dem oberen Rand der Tabellenansichtszelle (was wahrscheinlich klingt). Wenn Ihre origin.y wirklich 400-ish-Punkte sein sollte, bedeutet dies, dass sie in Ihrer UITableViewCell erscheinen müssen, damit Ihre tableViewCell über 400 Punkte groß sein muss.

Das könnte der Fall sein, aber ich frage mich, ob was Sie suchen, ist nicht origin.y, aber wie weit unter der Spitze der Root-Ansicht (self.view in Ihrem View-Controller) die Spitze Ihres Knopf ist. Wenn ja versuchen:

CGPoint originInRootview = [self.view convertPoint:CGPointZero fromView:self.favoriteButton]; 
CGFloat theNumberIThinkYouWant = originInRootview.y 
+0

Dies gibt -285 zurück. Scheint nicht korrekt. – birdcage

+0

@birdcage mein Fehler, der Code, den ich hatte, hätte die Frames in das root.view-Koordinatensystem konvertiert, was falsch ist, weil der Ursprung des Frames (seine Position relativ zur tableViewCell) nicht in das rootViews-Koordinatensystem konvertiert werden soll. Sie möchten die obere linke Ecke (0,0) Ihrer Schaltfläche in Bezug auf das Koordinatensystem der Stammansicht angeben. Ich habe den Code aktualisiert.Hier ist ein Link zu einer ähnlichen Antwort, die hilfreich sein kann https://stackoverflow.com/questions/8465659/understand-convertrecttoview-convertrectfromview-convertpointview-and- – TMin

0

Alle Werte zurückgeben korrekt außer frame.origin.y. Es gibt -1,5 zurück. Ich frage mich, was das verursachen könnte.

Anwendung eine auf die Ansicht verändern kann es dazu führen, frame Eigenschaft ungültig. Vom documentation for UIView's frame property:

Warnung

Wenn der Wert dieser Eigenschaft etwas anderes als die Identität Transformation ist, ist der Wert im Rahmen Eigenschaft undefiniert und ignoriert werden soll.

Also, wenn Sie nicht zu sehen sind, was Sie erwarten, vergleichen Sie Ihre Ansicht des transform zu CGAffineTransformIdentity.

Verwandte Themen