আইবিতে একটি স্ক্রোলভিউতে উল্লম্ব স্ক্রোলিংটি চেক করতে একটি বিকল্প রয়েছে, তবে এটি কাজ করছে বলে মনে হয় না।
আইবি-র পরিবর্তে কোডটিতে উল্লম্বভাবে না করে স্ক্রোলভিউটি কেবল অনুভূমিকভাবে স্ক্রোল করতে সেট করা যেতে পারে?
আইবিতে একটি স্ক্রোলভিউতে উল্লম্ব স্ক্রোলিংটি চেক করতে একটি বিকল্প রয়েছে, তবে এটি কাজ করছে বলে মনে হয় না।
আইবি-র পরিবর্তে কোডটিতে উল্লম্বভাবে না করে স্ক্রোলভিউটি কেবল অনুভূমিকভাবে স্ক্রোল করতে সেট করা যেতে পারে?
উত্তর:
কন্টেন্টসাইজের উচ্চতা স্ক্রোলভিউয়ের উচ্চতায় সেট করার চেষ্টা করুন। তারপরে উল্লম্ব স্ক্রোলটি অক্ষম করা উচিত কারণ উল্লম্বভাবে স্ক্রোল করার মতো কিছু নেই।
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
iOS7 সাল থেকে:
প্রথম: সামগ্রীর আকারের প্রস্থ আপনার স্ক্রোলভিউয়ের প্রস্থের সমান হতে হবে
দ্বিতীয়: আপনার initWithNibName এ:
self.automaticallyAdjustsScrollViewInsets = NO;
এটাই.
হ্যাঁ, pt2ph8 এর উত্তরটি সঠিক,
তবে যদি কোনও অদ্ভুত কারণে আপনার কন্টেন্টসাইজটি ইউআইএসক্রোলভিউয়ের চেয়ে বেশি হওয়া উচিত, আপনি ইউআইএসক্রোলভিউ প্রোটোকল পদ্ধতি প্রয়োগ করে উল্লম্ব স্ক্রোলিংটি অক্ষম করতে পারেন
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
এটি কেবল আপনার ইউআইভিউউকন্ট্রোলারে যুক্ত করুন
float oldY; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
// or if you are sure you wanna it always on top:
// [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}
এটি কেবলমাত্র সেই পদ্ধতিটিকে বলা হয় যখন ব্যবহারকারী আপনার ইউআইএসক্রোলভিউ স্ক্রোল করে এবং এমনটি করার ফলে আপনি এর সামগ্রীটি সর্বদা একইরকম রাখতে বাধ্য হন y
float oldY;
উপরের কোডটি উল্লেখ করে দয়া করে .m ফাইলে পুরাতন ওয়্যারিয়েবলটি ঘোষণা করবেন না । এটি প্রতি অ্যাপ্লিকেশনের জন্য সি-স্টাইলের পরিবর্তনশীল প্রতীক, ভেরিয়েবলটি নিয়ামক শ্রেণীর একটি উদাহরণ সদস্য হিসাবে ঘোষণা করা আবশ্যক।
নিম্নলিখিত পদ্ধতি অন্তর্ভুক্ত করুন
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
এবং স্ক্রোল ভিউয়ের প্রস্থের সমান স্ক্রোল ভিউয়ের সামগ্রী আকারের প্রস্থ সেট করে।
আপনি যে দিকটিতে চান সেটি অক্ষম করতে আপনাকে সামগ্রীর আকারে 0 পাস করতে হবে।
উল্লম্ব স্ক্রোলিং অক্ষম করতে
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
অনুভূমিক স্ক্রোলিং অক্ষম করতে
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
উল্লম্ব স্ক্রোলিং অক্ষম করতে আমি সামগ্রীর আকার আপডেট করেছি এবং স্ক্রোল করার ক্ষমতা এখনও রয়ে গেছে। তারপরে আমি বুঝতে পেরেছিলাম যে পুরো স্ক্রোলটি অক্ষম করার জন্য আমারও উল্লম্ব বাউন্স অক্ষম করা দরকার।
সম্ভবত এই সমস্যাযুক্ত ব্যক্তিরাও আছেন।
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
আপনি নিশ্চয়ই নিশ্চিত করেছেন UIScrollViewDelegate
aScrollView.delegate = self;
সর্বদা শীর্ষে থাকার জন্য y নির্ধারণ করুন। ইউআইএসক্রোলভিউডেলিগেটের সাথে সামঞ্জস্য করা দরকার
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
এটি স্ক্রোলিংয়ের পতন / ত্বরণ প্রভাব রাখবে will
আইওএস ১১-তে দয়া করে নিম্নলিখিতগুলি যুক্ত করতে মনে রাখবেন, যদি আপনি কোনও স্ক্রোলভিউ তৈরি করতে আগ্রহী যা কোনও নিরাপদ অঞ্চল না হয়ে স্ক্রিনের সীমানায় আটকে থাকে .:
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
আইওএস 11 থেকে নিম্নলিখিত সংস্থানটি ব্যবহার করতে পারবেন
let frameLayoutGuide: UILayoutGuide
তোমার জন্য সীমাবদ্ধতার সেট করেন তাহলে frameLayoutGuide.topAnchor এবং frameLayoutGuide.bottomAnchor কিছু একই নোঙ্গর করার subview আপনার এর scrollView তারপর উল্লম্ব স্ক্রোল অক্ষম হয়ে যাবে এবং উচ্চতা scrollView তার subview উচ্চতা সমান হতে হবে।
সর্বাধিক সুস্পষ্ট সমাধান হ'ল আপনার সাবক্লাসে y- স্থানাঙ্ক পরিবর্তনগুলি বারণ করা।
override var contentOffset: CGPoint {
get {
return super.contentOffset
}
set {
super.contentOffset = CGPoint(x: newValue.x, y: 0)
}
}
পরিস্থিতিতে এই একমাত্র উপযুক্ত সমাধান যখন:
প্রচুর উত্তরের মধ্যে contentOffset
0 এ সেট করা অন্তর্ভুক্ত রয়েছে case এটি আমার জন্য কাজটি করেছে:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}