Ես ամիսներ շարունակ պայքարում եմ դրա հետ իմ նախագծում:
Ահա գործարքը. ես ունեմ UITableView՝ ընդամենը 1 հատվածով, բայց UITableViewCells-ի բարձրությունները տարբերվում են: Յուրաքանչյուր UITableViewCell ներկայացնում է օբյեկտ, և նոր օբյեկտները մշտապես հասանելի են դառնում և տեղադրվում UITableView-ում: Աղյուսակում ցուցադրվող նոր օբյեկտի բարձրությունը արդյունավետորեն հայտնաբերելու միակ միջոցը այն մեկ անգամ նկարելն է (գործարկեք կոդը, որը նկարում է UITableViewCell-ը և նայեք, թե որն է ստացված բարձրությունը):
Ահ, բայց խնդիրը կա: UITableView պատվիրակության մեթոդը tableView:heightForRowAtIndexPath: կոչվում է ՆԱԽԽԵ բջիջը առաջին անգամ նկարելը: Սա իմաստ ունի. աղյուսակը ցանկանում է տեղադրել բջիջները նախքան դրանք նկարելը:
Ես շատ փորձեր եմ արել և կարող եմ գտնել միայն 2 տարբերակ, որոնք երկուսն էլ ունեն հիմնական բացասական կողմեր.
- Եթե աղյուսակում ցուցադրվող նոր օբյեկտը նախկինում չի երևացել, պարզապես «կռահեք» բարձրությունը և ավելի ուշ (բջջը նկարելուց հետո) չափեք բջիջը, ըստ անհրաժեշտության: Այնուամենայնիվ, սա խնդիրներ է առաջացնում ոլորման հետ կապված, քանի որ երբ օգտատերը դադարում է ոլորել, կարող է պատահել, որ մեկ կամ մի քանի բջիջների չափսերը պետք է չափափոխվեն ճիշտ բարձրության վրա, ինչը վատ օգտվողի փորձ է ստեղծում, քանի որ աղյուսակը տեղաշարժվում է և նորից կազմակերպվում:
- Նախապես հաշվարկեք օբյեկտի բարձրությունը՝ «փորձարկելով» օբյեկտը, նախքան այն տեղադրելը UITableView-ում: Երբ նոր օբյեկտը հասանելի դառնա, ստեղծեք «կեղծ» UITableViewCell և նկարեք այն էկրանից դուրս՝ այդպիսով հաշվարկելով օբյեկտի բարձրությունը և պահելով այն ավելի ուշ: Սրա խնդիրն այն է, որ, իհարկե, մենք կարող ենք կատարել միայն բարձրության թեստավորում հիմնական թելի վրա (քանի որ մենք պետք է նկարենք), ինչը մեծ ուշացում է առաջացնում հավելվածում:
Իմ լուծումը մինչ այժմ եղել է օգտագործել #2-ը, բայց փորձել եմ մեղմել խնդիրը՝ այնպես անելով, որ բարձրության թեստերը տեղի ունենան միայն վայրկյանի 1/4-ը, ինչը օգնում է «բաց թողնել» թեստը, որպեսզի հիմնական շարանը շատ կողպված չէ: Սակայն լուծումը աննման է և դեռևս առաջացնում է հետաձգման խնդիրներ, հատկապես հին սարքերում: Հետաձգումը բավականաչափ վատ է, որ ես իսկապես ավելի լավ լուծման կարիք ունեմ: