Vraag hoe de UITableViewCell te verkrijgen binnen heightForRowAtIndexPath?


Hoe verkrijgt men het UITableViewCell wanneer binnen de heightForRowAtIndexPath methode, d.w.z. gegeven de indexPath?

(dan had ik toegang tot de inhoudsviews die ik heb gemaakt om hun hoogten toe te voegen)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // How to get the UITableViewCell associated with this indexPath?
}

bedankt

EDIT: In feite is er echt een geldige manier om dit te doen? Als ik er wat doe NSLog uitspraken lijkt het erop dat heightForRowAtIndexPath het heeft verschillende keren gebeld voor de oproepen naar cellForRowAtIndexPath (dat is waar ik de UILabels in de cel)? Dit soort impliceert dat ik kan worden geprobeerd een techniek te gebruiken die niet zal werken, d.w.z. ik hoopte erin heightForRowAtIndexPath om toegang te krijgen tot de al gemaakte labels in elke cel om hun hoogten te krijgen en ze samen toe te voegen voor de totale celrijhoogte, ECHTER als ze nog niet zijn ingesteld (binnen cellForRowAtIndexPath) dan denk ik dat mijn aanpak niet echt kan werken?


27
2018-03-10 02:17


oorsprong


antwoorden:


Voor iOS8:

override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.estimatedRowHeight = 80
        self.tableView.rowHeight = UITableViewAutomaticDimension
    }

OF

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return UITableViewAutomaticDimension

    }

Maar voor iOS7, de sleutel is het berekenen van de hoogte na autolayout,

func calculateHeightForConfiguredSizingCell(cell: GSTableViewCell) -> CGFloat {
        cell.setNeedsLayout()
        cell.layoutIfNeeded()
        let height = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize).height + 1.0
        return height

    }

Notitie:

1) Als er meerdere regels zijn, vergeet dan niet de numberOfLines tot 0.

2) Vergeet niet label.preferredMaxLayoutWidth = CGRectGetWidth(tableView.bounds)


-20
2018-03-10 02:35



U kunt de gedelegeerde van de tabel gebruiken in plaats van de tabel Zelf bekijken.

id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

Controleer het antwoord hier

UPDATE

In nieuwe iOS-versies en met de juiste automatische beperkingen hoeft u niet meer naar de cel te verwijzen om de hoogte van de cel te berekenen.

Kijk hier

https://www.raywenderlich.com/129059/self-sizing-table-view-cells 


24
2018-03-31 09:28



Deze vraag heeft geen zin omdat in

heightForRowAtIndexPath

er zijn nog geen cellen gemaakt. Zo werkt tableView:

  1. TableView vraagt ​​zijn datasource hoeveel secties het zal hebben. -numberOfSectionsInTableView
  2. Vraagt ​​dat het datasource is hoeveel rijen elke sectie zal hebben (om te weten hoe groot scroller zou moeten zijn enz.) -numberOfRowsInSection
  3. Vraagt ​​dat het de gedelegeerde hoogte van elk is zichtbare rij. Om te weten waar cellen zullen worden gevonden. - heightForRowAtIndexPath
  4. Ten slotte vraagt ​​het datasource om het een cel te geven om op gegeven indexpad weer te geven -cellForRowAtIndexPath

Je hebt dus geen toegang tot cellen van heightForRowAtIndexPath omdat met een meest waarschijnlijke cel nog niet is gemaakt.


Mocht ik je vraag verkeerd begrepen hebben, probeer dan:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

17
2017-11-28 15:27



Het voor de hand liggende antwoord is om te bellen cellForRowAtIndexPath, maar je hebt misschien al ontdekt dat daar problemen mee zijn. Zie deze vraag als u dat nog niet heeft gedaan: UITableView flexibele / dynamische hoogteForRowAtIndexPath

Voor mijn laatste project heb ik een aangepaste subklasse van UICell gebruikt en een methode als deze geïmplementeerd. Ik heb dit toen gebeld table:heightForRowAtIndexPath: (na het opzoeken van de inhoud voor die rij).

+ (CGFloat) heightOfContent: (NSString *)content
{
    CGFloat contentHeight = 
           [content sizeWithFont: DefaultContentLabelFont
               constrainedToSize: CGSizeMake( DefaultCellSize.width, DefaultContentLabelHeight * DefaultContentLabelNumberOfLines )
                   lineBreakMode: UILineBreakModeWordWrap].height;
    return contentHeight + DefaultCellPaddingHeight;
}

14
2018-03-10 02:40



ik zou u willen voorstellen om de juiste hoogte van een rij in te berekenen table:heightForRowAtIndexPath: door gebruik te maken van uw datastructuur (hoogte van tekst, afbeeldingen, mutlilinetekst, enz.).

En verander de componenthoogte in hun -(void) layoutSubviews methode.


4
2018-03-10 02:52



Gebruik tags als u toegang wilt tot de cellen. Maar zoals @Jhaliya heeft gezegd, is het beter om de hoogte te berekenen op basis van de inhoud van de cel. Als je rekening houdt met de positie van de cel, raad ik je aan de scrollweergave te gebruiken en de cellen zelf te implementeren waar je maar wilt.


1
2018-01-08 09:44