আমি প্রারম্ভিক আপডেটগুলিতে অ্যানিমেশন চাই না, ইউটিবেল ভিউয়ের জন্য শেষ আপডেটগুলি ব্লক করব?


89

আমার একটি ইউআইটিএবলভি রয়েছে যা একটি কাস্টম টেবিল সেল ব্যবহার করছে এবং প্রতিটি ঘরে একটি ইউআইবিউব ভিউ রয়েছে।

ইউআইবিউবভিউ লোড করতে সময় বয়ে নিয়েছে তাই আমি এগুলি কোনও মূল্যে পুনরায় লোড করা এড়াতে চাই। কিছু পরিস্থিতিতে, আমার সমস্ত ঘর লোড হয়েছে তবে তাদের উচ্চতাগুলি গণ্ডগোল হয়ে গেছে। অতএব, "সেলফোর্ড" ফাংশনটি ট্রিগার না করে আমার টেবিলটি "রিলেআউট" করতে হবে।

  1. আমি অবশ্যই পুনরায় লোড ডেটা ব্যবহার করতে পারি না ... কারণ এটি আবার কোষগুলি পুনরায় লোড করবে।
  2. আমি টেবিলভিউ.সেটনিডডিসপ্লে, সেটনিডস লেআউট ইত্যাদির চেষ্টা করেছি, তাদের কেউই টেবিলের ঘরগুলি পুনর্বিন্যাস করতে সক্ষম নয়
  3. এটি কাজ করার একমাত্র উপায়, স্টার্টআপডেটস / এন্ডআপডেটস ব্লককে কল করা, এই ব্লকটি সেলফোর্ডআর ছাড়াই আমার টেবিলটি রিলেআউট করতে সক্ষম! কিন্তু, আমি অ্যানিমেশন চাইনি! এই ব্লকটি একটি অ্যানিমেশন প্রভাব তৈরি করে তবে আমি এটি চাই না ...

আমি কীভাবে আমার সমস্যা সমাধান করতে পারি?

উত্তর:


217
[UIView setAnimationsEnabled:NO];
[tableView beginUpdates];
[tableView endUpdates];
[UIView setAnimationsEnabled:YES];

4
এটা অসাধারণ! আমি এটির বেশ কয়েকটি আকর্ষণীয় অ্যাপ্লিকেশন পেয়েছি। আমি দেখতে পেয়েছি যে পুনরায় লোড বিভাগগুলি সর্বদা আপনি প্রবেশ UITableViewRowAnimationNoneকরলেও অ্যানিমেট হবে, তবে এটির সাহায্যে অ্যানিমেশনটি সহজেই বাইপাস করা যায়!
উড়ন্ত_বানানা

65

ব্লক ব্যবহার করে এটি করার আরও একটি উপায়

ওবজ-সি

[UIView performWithoutAnimation:^{
   [self.tableView beginUpdates];
   [self.tableView endUpdates];
}];

সুইফট

UIView.performWithoutAnimation {
    tableView.beginUpdates()
    tableView.endUpdates()   
}

4

আমার প্রকল্পে কাজ, কিন্তু একটি সাধারণ সমাধান নয়।

let loc = tableView.contentOffset
UIView.performWithoutAnimation {

    tableView.reloadData()

    tableView.layoutIfNeeded()
    tableView.beginUpdates()
    tableView.endUpdates()

    tableView.layer.removeAllAnimations()
}
tableView.setContentOffset(loc, animated: true)//animation true may perform better

3

কাজ করার জন্য সুইফটিসের জন্য আমাকে নিম্নলিখিতগুলি করতে হয়েছিল:

// Sadly, this is not as simple as calling:
//      UIView.setAnimationsEnabled(false)
//      self.tableView.beginUpdates()
//      self.tableView.endUpdates()
//      UIView.setAnimationsEnabled(true)

// We need to disable the animations.
UIView.setAnimationsEnabled(false)
CATransaction.begin()

// And we also need to set the completion block,
CATransaction.setCompletionBlock { () -> Void in
    // of the animation.
    UIView.setAnimationsEnabled(true)
}

// Call the stuff we need to.
self.tableView.beginUpdates()
self.tableView.endUpdates()

// Commit the animation.
CATransaction.commit()

আমাকে সাহায্য করে ছিল. ধন্যবাদ setAnimationsEnabled(true)সমাপ্তি ব্লকের ভিতরে রাখা গুরুত্বপূর্ণ ।
লাসে বাঙ্ক

আপনি টেবিল ভিউ স্ক্রোল না করা পর্যন্ত এটি পাদলেখ আপডেট করে না।
মিঃ বিন বিন

@ মিঃবিয়ান পুরো মামলাটি কী? (উদাহরণস্বরূপ, আপনার টেবিলভিউটিতে সর্বদা কোনও পাদলেখ থাকে, আপনি কি একটি sertোকানোর বা একটি অপসারণ করার চেষ্টা করছেন?)
নীল যাপথা

সর্বদা একটি পাদলেখ থাকুন, কেবল ফুটার আপডেট করতে হবে (অর্থাত্ ফুটারের মধ্যে 2 টি মতামত রয়েছে, শর্তের উপর ভিত্তি করে দৃষ্টিভঙ্গিগুলি আড়াল / লুকানো প্রয়োজন))
মিঃ বিন বিন

@ মিঃবিয়ান আপনার আপডেট ব্লকটিতে কী রয়েছে? এখানে সর্বাধিক বর্ধিত পদ্ধতি হ'ল বিভাগটি পুনরায় লোড করা।
নীল যাফথা

1

আমি একটি মসৃণ ট্রানজিশন করতে পছন্দ করি:

CGPoint offset = self.tableView.contentOffset;
[UIView transitionWithView:self.tableView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        [self.tableView reloadData];
        self.tableView.contentOffset = offset;
    } completion:nil];

একবার চেষ্টা করে দেখো.


0

আমি বিভাগ 5 এর জন্য ঘরের উচ্চতা আপডেট করতে চেয়েছিলাম এবং নিম্নলিখিত কোডটি আমার জন্য কাজ করেছে:

UiView.setAnimationsEnabled(False)
self.productTableView.reloadSections(NSIndexSet(index: SectionType.ProductDescription.hashValue), withRowAnimation: UITableViewRowAnimation.None)
self.productTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 5), atScrollPosition: UITableViewScrollPosition.Bottom, animated: false)
UIView.setAnimationsEnabled(true)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.