2016-07-14 8 views
0

Ich habe eine UIView in IB in einer Prototypzelle erstellt und Einschränkungen hinzugefügt. Die Zelle hat eine benutzerdefinierte Klasse. Wenn ich versuche, die Breite der UIView in cellForRowAtIndexPath zu erhalten, gibt es 476 statt 251 zurück. Nach dem Lesen von SO zu diesem Thema und den vielen Antworten habe ich versucht, setNeedsLayout und layoutSubviews() in cellForRowAtIndexPath oder in der Unterklasse aufzurufen der richtige Wert Die Höhe 20 ist korrekt. Jede Hilfe sehr geschätzt!So erhalten Sie die richtige Breite einer UIView in UITableViewCell swift

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("EventCell") as! CustomResultsTVCell 

    // cell.setNeedsLayout() 

    let maxWidth = cell.barView.frame.width 
    print("barview maxWidth is \(maxWidth)") 
    // prints 476.0 

IB

+0

Was ist das Problem, vor dem Sie stehen? Sie haben Artikel, die nicht korrekt angezeigt werden? – jo3birdtalk

+0

Haben Sie die Auto-Layout-Eigenschaft der Zellenansicht überprüft? Gibt es Einschränkungen für die Breite? – triandicAnt

+0

@ jo3birdtalk - das Problem ist, dass das Gerät, das auf iphone5S läuft, eine Bildschirmbreite von 320 hat. Und maxwidth zeigt sich als viel größer als das. – richc

Antwort

0

Sie haben eine trailing und leading Beschränkung von 55 und 10. Dies würde die Breite machen Ihre Eltern Ansicht zu sein, die in diesem Fall CustomResultsTVCell minus von 55 von trailing und 10 leading Raum.

Wenn Sie eine hartcodierte 251-Breite erhalten möchten, sollten Sie Width gleich 251 constraint einstellen.

Oder wenn Sie wirklich denken, dass Sie eine 251 Breite erhalten annehmen, nachdem die trailing und leading Raum anwenden, dann denke ich, die Einschränkung für Ihren CustomResultsTVCell oder UITableView ist nicht in der Breite, die Sie denken. Vielleicht zeigen Sie uns auch die Einschränkung für diese.

+0

Hallo Zac, ich möchte die Breite biegen je nach dem Gerät läuft, deshalb habe ich den Code 251 nicht hart programmiert. Ich habe die Zelle gelöscht, so dass die UIView nur eine führende und nachgestellte Einschränkung von 0 auf die Inhaltsansicht hat. Die TableVC ist in ein ContainerView eingebettet, das sich in einem ViewContoller mit simulierter Metrikgröße befindet, die auf iPhone 4,7 Zoll eingestellt ist. Also sollte die UIView 375 breit sein. Aber jetzt druckt es bei 584. Wenn ich die simulierte Größe auf 4 Zoll ändere wird als 359 gedruckt. Wie wirkt sich die simulierte Größe aus, wenn sie auf einem Gerät 5S läuft. Bizarre .... – richc

+0

Ich fürchte, simulierte Metriken Größe könnte hier in diesem Fall überfahren werden. Im Allgemeinen wird eine View-Controller-Hierarchie eingefügt, die die Größe ändert. Haben Sie Debuggen und überprüfen Sie Ihre Breite von ContainerView zur Laufzeit? –

+0

yep, die Containeransicht ist 320 Breite zur Laufzeit. Die TableVC ist in den Container eingebettet. Aus irgendeinem Grund nimmt der TableVC nicht die gleichen Maße auf wie der Behälter .... – richc