UIColલેક્શન ভিউতে ইউআইআরআইফ্রেশকন্ট্রোল কেবল তখনই কাজ করে যদি সংগ্রহটি ধারকটির উচ্চতা পূরণ করে


142

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

আমি UICollectionViewসংগ্রহ ভিউতে একটি আউটলেট দিয়ে মূল দৃশ্যের অভ্যন্তরে একটি দ্রুত আইওএস প্রকল্প স্থাপন করেছি যাতে আমি এতে যুক্ত UIRefreshControlকরতে পারি viewDidLoad। পুনরায় ব্যবহার শনাক্তকারী সহ একটি প্রোটোটাইপ সেল রয়েছেcCell

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

@interface ViewController () <UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [self.collectionView addSubview:refreshControl];
}

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 1;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    return [collectionView dequeueReusableCellWithReuseIdentifier:@"cCell" forIndexPath:indexPath];
}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(self.view.frame.size.width, 100);
}

10 iOS এর জন্য এই দেখতে stackoverflow.com/questions/19483511/...
Anish পরাজুলি 웃

1
ব্যবহার করুনalwaysBounceVertical
onmyway133

উত্তর:


395

এটা চেষ্টা কর:

self.collectionView.alwaysBounceVertical = YES;

একটি জন্য সম্পূর্ণ কোড UIRefreshControl

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.tintColor = [UIColor grayColor];
[refreshControl addTarget:self action:@selector(refershControlAction) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];
self.collectionView.alwaysBounceVertical = YES;

1
আশ্চর্যজনক, সেই লাইনটি হুবহু ঠিক করা, বাকি কোডগুলিতে কিছু আসে যায় না। স্ট্যাকওভারফ্লোতে আপনার জন্য খারাপ শুরু নয়! চিয়ার্স!
মেরোট

7
হ্যাঁ সমস্যা নেই। এটা স্পষ্ট যে আমি একটি নবাগত হু। যাইহোক দেখা যাচ্ছে যে আমি যখন আপনার পোস্ট দেখলাম তখন আমি একই পরিস্থিতিতে আটকে ছিলাম। আমি যখন সমাধানটি পেয়েছি তবে আমার অবশ্যই এটি ভাগ করা উচিত। চিয়ার্স
ল্যারি

6
ভাল, জুয়ান, আপনি সম্ভবত আপনার প্রশ্নের উত্তর ইতিমধ্যে খুঁজে পেয়েছেন। তবে, রিফ্রেশ নিয়ন্ত্রণের পরে রিফ্রেশ নিয়ন্ত্রণটিকে স্বাভাবিক অবস্থায় ফিরিয়ে আনতে আপনাকে অবশ্যই কল করতে হবে [refreshControl endRefreshing]
মেরোট

2
দুর্ভাগ্যক্রমে এটি আর সমর্থিত নয়। ইউআইআরআইফ্রেশকন্ট্রোল কেবলমাত্র ইউআইটিএবলভিউ কনট্রোলারের সাথে ব্যবহার করা যেতে পারে এবং এখন এটি কঠোরভাবে প্রয়োগ করা হয়েছে।
লুক ভ্যান

3
আইওএস 10-তে, UIScrollView(এর তত্ত্বাবধানের UICollectionView) এখন একটি refreshControlসম্পত্তি রয়েছে বিকাশকারী
স্ট্রিটার

29

স্টোরিবোর্ড / এক্সিবায় বৈশিষ্ট্য / স্ক্রোল ভিউ / উলম্বভাবে বাউন্স

এখানে চিত্র বর্ণনা লিখুন


23

দ্রুত ল্যারির উত্তর:

    let refreshControl = UIRefreshControl()
    refreshControl.tintColor = UIColor.blueColor()
    refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged)
    collectionView.addSubview(refreshControl)
    collectionView.alwaysBounceVertical = true

সুইফট 3:

    let refreshControl = UIRefreshControl()
    refreshControl.tintColor = .blue
    refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
    collectionView.addSubview(refreshControl)
    collectionView.alwaysBounceVertical = true

কনস্ট নির্ধারিত ভেরিয়েবলের ত্রুটি দেয়। যদি কেউ একই পরিস্থিতির মুখোমুখি হয় তবে এটি UIColor.whiteColor()আপনার পছন্দ মতো রঙের সাথে প্রতিস্থাপন করুন ।
ফয়সাল

1
এছাড়াও সুইফট ২.২ ব্যবহারের জন্যaction: #selector(self.refresh)
ফয়সাল

1

আপনার যদি collectionviewকোনও সামগ্রীর আকার উল্লম্বভাবে স্ক্রোল করার পক্ষে যথেষ্ট পরিমাণে থাকে তবে এটি ঠিক আছে, তবে আপনার ক্ষেত্রে এটি তা নয়।

আপনাকে অবশ্যই সম্পত্তি সক্ষম করতে হবে AlwaysBounceVertical, যাতে আপনি সেট করতে পারেনself.collectionView.alwaysBounceVertical = YES;


0

আমিও একই সমস্যার মুখোমুখি হয়েছি, UIRefreshControlযতক্ষণ না UICollectionViewএর সামগ্রীর আকার উল্লম্বভাবে স্ক্রোল করার জন্য যথেষ্ট পরিমাণে বড় না হওয়া পর্যন্ত আমি এটি ব্যবহার করতে সক্ষম হইনি ,

এটি সমাধানের bouncesসম্পত্তি নির্ধারণ UICollectionViewকরা

[self.collectionView setBounces:YES];
[self.collectionView setAlwaysBounceVertical:YES];

0

আমি beginRefreshing()ঠিক পরে ফোন করছি viewDidLoad(), তবে কিছু পর্দায় এটি কাজ করে না। আর শুধুমাত্র collectionView.layoutIfNeeded()মধ্যে viewDidLoad()আমাকে সাহায্য


0

সংগ্রহ ভিউ রিফ্রেশ অবস্থায় আছে তবে আপনাকে রিফ্রেশিং নিয়ন্ত্রণ বরখাস্ত করার জন্য রিফ্রেশ শেষ করতে হবে এপিআই কল অবশ্যই।

private let refreshControl = UIRefreshControl()
 refreshControl.tintColor = .white
 refreshControl.addTarget(self, action: #selector(refreshData), for: .valueChanged)
 collectionView.addSubview(refreshControl)
 @objc func refreshData() {
    // API Call
 }
// Disable refresh control if already refreshing 
if refreshControl.isRefreshing {
    refreshControl.endRefreshing()
}

স্ক্রোলটিতে বাউস হিসাবে উল্লেখ করা যেতে পারে আমার স্টোরিবোর্ড ফাইলটিতে সক্ষম।
আসাদ জামিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.