ইউআইএসক্রোলভিউতে উল্লম্ব স্ক্রোলিং অক্ষম করা হচ্ছে


86

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

আইবি-র পরিবর্তে কোডটিতে উল্লম্বভাবে না করে স্ক্রোলভিউটি কেবল অনুভূমিকভাবে স্ক্রোল করতে সেট করা যেতে পারে?


উত্তর:


121

কন্টেন্টসাইজের উচ্চতা স্ক্রোলভিউয়ের উচ্চতায় সেট করার চেষ্টা করুন। তারপরে উল্লম্ব স্ক্রোলটি অক্ষম করা উচিত কারণ উল্লম্বভাবে স্ক্রোল করার মতো কিছু নেই।

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);

আপনি এই অদ্ভুত ইস্যুটি ডিবাগ করার জন্য আমাকে কেবলমাত্র অনেক সময় সাশ্রয় করেছেন। ধন্যবাদ!
জেএমএম

4
@ ফ্যাব যখন ফ্রেমটি পরিবর্তন হবে তখন কীভাবে জানবেন?
স্যাম

138

iOS7 সাল থেকে:

প্রথম: সামগ্রীর আকারের প্রস্থ আপনার স্ক্রোলভিউয়ের প্রস্থের সমান হতে হবে

দ্বিতীয়: আপনার initWithNibName এ:

self.automaticallyAdjustsScrollViewInsets = NO;

এটাই.


বিস্ময়কর সমাধান। কবজির মতো কাজ করেছেন। এটি আমার ভিউকন্ট্রোলারের অন্যান্য দর্শনের আকারকে প্রভাবিত করবে? (বোতাম, লেবেল ..) আমি বলতে চাইছি "স্ব" আমার ক্ষেত্রে একটি
ইউআইভিউ কনট্রোলার

@voghDev এর কোনওরূপে আপনার স্ক্রোলভিউতে সংক্ষিপ্তসারগুলির কোনও প্রভাব নেই।
মিরকো ব্রুনার

আশ্চর্যজনকভাবে আমার ভিউ কন্ট্রোলারগুলিতে সমস্যা হওয়ায় এটি ভিডিডলোড পদ্ধতিতে যুক্ত করেছে।
স্ট্যাকরুনার

আপনি যদি নেভিগেশনকন্ট্রোলার ব্যবহার করেন এবং আপনার স্ক্রোলভিউটি ভিভিডিডলড পদ্ধতিতে খনি ব্যবহারের মতো নেভিগেশনবারের শিরোনামের পিছনে রয়েছে। এটি সমাধান করে।
EFE

4
আপনি কোনও কোডের লাইন ছাড়াই স্টোরিবোর্ড সেটিংসে এটি অর্জন করতে পারেন। কেবল স্ক্রোল ভিউ কন্ট্রোলারটি নির্বাচন করুন এবং এট্রিবিউট ইন্সপেক্টরটিতে "স্ক্রোল ভিউ ইনসেটগুলি সামঞ্জস্য করুন" আনচেক করুন।
মরফিউস

49

হ্যাঁ, 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


6
সৃষ্টিকর্তা! float oldY;উপরের কোডটি উল্লেখ করে দয়া করে .m ফাইলে পুরাতন ওয়্যারিয়েবলটি ঘোষণা করবেন না । এটি প্রতি অ্যাপ্লিকেশনের জন্য সি-স্টাইলের পরিবর্তনশীল প্রতীক, ভেরিয়েবলটি নিয়ামক শ্রেণীর একটি উদাহরণ সদস্য হিসাবে ঘোষণা করা আবশ্যক।
Itachi

21

নিম্নলিখিত পদ্ধতি অন্তর্ভুক্ত করুন

-(void)viewDidLayoutSubviews{
    self.automaticallyAdjustsScrollViewInsets = NO;
}

এবং স্ক্রোল ভিউয়ের প্রস্থের সমান স্ক্রোল ভিউয়ের সামগ্রী আকারের প্রস্থ সেট করে।


4
স্টোরিবোর্ডে ভিউ কন্ট্রোলার বাছাই করে এবং সেখানে সম্পত্তিটি পরীক্ষা করেও করা যেতে পারে
জাস্টক্লাবগুলি

4
আমি এটি পছন্দ করি না কারণ এটি সমস্ত স্ক্রোল দর্শনগুলির জন্য এটি সেট করে ... আপনি যদি ডায়াগ্রামের উপর একটি স্ক্রোল দর্শনটি নির্দিষ্ট করতে পারেন তবে / একটি নতুন স্ক্রোলভিউ ক্লাস তৈরি করা ইত্যাদি
ভিস্ক

20

আপনি যে দিকটিতে চান সেটি অক্ষম করতে আপনাকে সামগ্রীর আকারে 0 পাস করতে হবে।

উল্লম্ব স্ক্রোলিং অক্ষম করতে

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);

অনুভূমিক স্ক্রোলিং অক্ষম করতে

scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);

4
এটি আপনার সেট অক্ষটিতে 0 টির জন্য ভিউটির সামগ্রী আকার সেট করবে ize কন্টেন্টসাইজ সামগ্রীটির আকার উল্লেখ করছে, তাই আমরা সেই ফ্রেমের বাইরে উল্লম্ব স্ক্রোলিংটি অক্ষম করতে স্ক্রিনের উচ্চতায় চলে যেতে চাই। সমাধানটি সঠিক হিসাবে চিহ্নিত, সঠিক is
সিস্টেম

এটি আমার পক্ষে ভাল কাজ করেছে। কন্টেন্টসাইজের উচ্চতা হিসাবে উচ্চতা নির্ধারণ করা আমাকে এখনও উলম্ব স্ক্রোলিংয়ে পেয়েছে।
কোরিয়ানএক্সকোড ওয়ার্কার

4
এটি আমার পক্ষে কার্যকর হয়নি। স্ব.আউটমেটিক্যালি
অ্যাডজাস্টস

এই হল! স্ক্রোল ভিউয়ের উচ্চতায় সেট করা আমার পক্ষে কাজ করে নি, তবে এটি হয়েছে
একিজল

18

উল্লম্ব স্ক্রোলিং অক্ষম করতে আমি সামগ্রীর আকার আপডেট করেছি এবং স্ক্রোল করার ক্ষমতা এখনও রয়ে গেছে। তারপরে আমি বুঝতে পেরেছিলাম যে পুরো স্ক্রোলটি অক্ষম করার জন্য আমারও উল্লম্ব বাউন্স অক্ষম করা দরকার।

সম্ভবত এই সমস্যাযুক্ত ব্যক্তিরাও আছেন।


তুমি আমাকে বাঁচালে. আমার কন্টেন্টসাইজ এবং ফ্রেম একই ছিল এবং আমার জীবনের জন্য আমি কী ভুল ছিল তা বুঝতে পারি না। ধন্যবাদ এক গুচ্ছ !!
ইউফ

4
আপনার উত্তর কেন আমি স্ট্যাকওভারফ্লো পছন্দ করি! :-) পবিত্র ধোঁয়া ... এটি আমাকে বাদাম! তুমি ঠিক. এটা বাউন্স প্রভাব। আমি বাউন্স এফেক্টটি চাই, তবে যখন স্ক্রোল করার দরকার নেই তখন নয়, তাই আমি স্ক্রোল করার প্রয়োজন আছে কিনা তার উপর নির্ভর করে কোডটিতে এখন সেই প্রভাবটি অক্ষম / পুনরায় সক্ষম করতে চাই।
এরিক ভ্যান ডের নিউট

4
ঠিক আছে, রানটাইমে কোনও ইউআইএসক্রোলভিউতে বাউন্সগুলি সক্ষম / অক্ষম করা খুব সহজ। আমার ক্ষেত্রে আমি কেবল স্ক্রোল সামগ্রীর উচ্চতা সম্পর্কে যত্নশীল এবং এটি কৌশলটি করেছে: self.scrolView.bounces = (BOOL) (self.scrollView.contentSize.height> self.scrolView.frame.size.height);
এরিক ভ্যান ডের নিউট

12
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];

}

আপনি নিশ্চয়ই নিশ্চিত করেছেন UIScrollViewDelegate

aScrollView.delegate = self;

4

সর্বদা শীর্ষে থাকার জন্য y নির্ধারণ করুন। ইউআইএসক্রোলভিউডেলিগেটের সাথে সামঞ্জস্য করা দরকার

func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.y = 0.0
}

এটি স্ক্রোলিংয়ের পতন / ত্বরণ প্রভাব রাখবে will


4

আইওএস ১১-তে দয়া করে নিম্নলিখিতগুলি যুক্ত করতে মনে রাখবেন, যদি আপনি কোনও স্ক্রোলভিউ তৈরি করতে আগ্রহী যা কোনও নিরাপদ অঞ্চল না হয়ে স্ক্রিনের সীমানায় আটকে থাকে .:

if (@available(iOS 11.0, *)) {
    [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}

4
সর্বোপরি. আপনাকে হাজারবার ধন্যবাদ স্যার! আপনি আমার দিন বাঁচিয়েছেন
ha100

1

আইওএস 11 থেকে নিম্নলিখিত সংস্থানটি ব্যবহার করতে পারবেন

let frameLayoutGuide: UILayoutGuide

তোমার জন্য সীমাবদ্ধতার সেট করেন তাহলে frameLayoutGuide.topAnchor এবং frameLayoutGuide.bottomAnchor কিছু একই নোঙ্গর করার subview আপনার এর scrollView তারপর উল্লম্ব স্ক্রোল অক্ষম হয়ে যাবে এবং উচ্চতা scrollView তার subview উচ্চতা সমান হতে হবে।


1

সর্বাধিক সুস্পষ্ট সমাধান হ'ল আপনার সাবক্লাসে y- স্থানাঙ্ক পরিবর্তনগুলি বারণ করা।

override var contentOffset: CGPoint {
  get {
    return super.contentOffset
  }
  set {
    super.contentOffset = CGPoint(x: newValue.x, y: 0)
  }
}

পরিস্থিতিতে এই একমাত্র উপযুক্ত সমাধান যখন:

  1. আপনার অনুমোদিত নয় বা কেবল প্রতিনিধি ব্যবহার করতে চান না।
  2. আপনার সামগ্রীর উচ্চতা ধারক উচ্চতার চেয়ে বড়

4
এটাই সেরা উত্তর! সমাধান হিসাবে নির্বাচন করা উচিত! ধন্যবাদ সাথী তুমি আমার দিন বাঁচিয়েছ!
13-25

@ আমার পছন্দমতো সমাধানটি হ'ল সুইজলিং ব্যবহার করা (: গিথুব. com
iwheelbuy

0

প্রচুর উত্তরের মধ্যে contentOffset0 এ সেট করা অন্তর্ভুক্ত রয়েছে case এটি আমার জন্য কাজটি করেছে:

public func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = -scrollView.contentInset.top
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.