কীভাবে ইউআইএসক্রোলভিউয়ের অনুভূমিক স্ক্রোলিং অক্ষম করবেন?


92

আমার UIViewআইফোনের স্প্রিংবোর্ডের মতো আমি এটি UIScrollViewএবং ব্যবহার করে তৈরি করেছি UIButtons। আমি বলেন স্ক্রোলভিউতে অনুভূমিক স্ক্রোলিং অক্ষম করতে চাই। আমি কেবল উল্লম্ব স্ক্রোলিং চাই। আমি কীভাবে এটি সম্পাদন করব?


4
আপনার আপনার শিরোনাম পরিবর্তন করা উচিত: আপনি প্রশ্নের অনুভূমিক এবং শিরোনামে উল্লম্ব জন্য জিজ্ঞাসা করুন। লোকেরা আপনার প্রশ্নগুলি পরে অনুসন্ধান ইঞ্জিনগুলিতে খুঁজে পায়, সুতরাং এটি 2 বছর পরে এখনও গুরুত্বপূর্ণ :)
জুলিয়ান

@ রাহুলভিয়াস উপরের লোকটির একটি বক্তব্য রয়েছে। শিরোনাম পরিবর্তন করা নতুনদের জন্য কোনও বিভ্রান্তি হ্রাস করবে যারা এখানে সার্চ ইঞ্জিনের মাধ্যমে আসেন (যেমন আমার মতো;))।
স্পেসিরিচোচেট

পোস্টারের পক্ষে শিরোনাম সম্পাদনা করেছেন। (যদিও এটি সম্পাদনাটি দৃশ্যমান হওয়ার আগে এটি পিয়ারের পর্যালোচনার অপেক্ষায় রয়েছে))
ডানকান ব্যাবেজ

উত্তর:


125

আপনার contentSizeসম্পত্তি সেট করতে হবে UIScrollView। উদাহরণস্বরূপ, যদি আপনার UIScrollView320 পিক্সেল প্রশস্ত হয় (পর্দার প্রস্থ), তবে আপনি এটি করতে পারেন:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

UIScrollViewউইলটি কেবল তখন উল্লম্বভাবে স্ক্রোল করবে কারণ এটি ইতিমধ্যে সমস্ত কিছু অনুভূমিকভাবে প্রদর্শন করতে পারে।


6
ওহে. এই সমাধান সত্যিই জরিমানা কাজ করে! তার জন্য ধন্যবাদ. আমি স্থির প্রস্থকে 0 এ সেট করার চেষ্টা করেছি আমার জন্য এটিও কাজ করে। আমি জানি না পরে কিছু পার্শ্ব প্রতিক্রিয়া হতে পারে কিনা। তবে যদি কেউ আকারটি না জানে (আইফোন এবং আইপ্যাডের জন্য সর্বজনীন কোড) এটি দুর্দান্ত কাজ করে!
জ্যাকপিয়ার্স

4
আমি সিজি সাইজমেক (0, মাইক্রোক্রেবলহাইট) করা ভাল বলে মনে করি, সুতরাং সমস্ত সাবভিউ না দেখালেও অনুভূমিক স্ক্রোলিং অক্ষম।
লাইটনিइट

পেজিং ব্যবহার করার সময় এনবি মাত্রার মধ্যে একটি মাত্রার 0 সেট করা ভয়েসওভারকে সঠিক মান নির্বিশেষে পৃষ্ঠা নম্বরটিকে "1 এর 1 পৃষ্ঠা" হিসাবে ঘোষণা করবে
জোসেফ

4
320 হার্ডকোডযুক্ত প্রস্থের পরিবর্তে, আমরা এর মতো পাস করতে পারি: CGSize scrollableSize = CGSizeMake (self.scrolview.frame.size.width, myScrollableHeight); [মাইস্ক্রোলভিউ সেটকন্টেন্টসাইজ: স্ক্রোলবেলসাইজ];
মোহিত কুমার

91

আপডেট হয়েছে: (@ ইরানমারম তার মন্তব্যে ইঙ্গিত করার পরে)

আপনি করতে পারেন অনুভূমিক স্ক্রলিং অথবা উল্লম্ব স্ক্রলিং বন্ধ মধ্যে ScrollViewDelegateপদ্ধতি। এখানে এটি কিভাবে,

অনুভূমিক স্ক্রোলিং থামায়:

আপনি যদি অনুভূমিকভাবে স্ক্রোল করতে চান তবে আপনার সামগ্রীর অফসেট.এক্স বাড়ানো দরকার। এটি আটকাচ্ছে যে অনুভূমিক দিকে স্ক্রোলভিউ স্ক্রোলটি থামিয়ে দেয়।

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

উল্লম্ব স্ক্রোলিং থামায়:

আপনি যদি উল্লম্বভাবে স্ক্রোল করতে চান, তবে আপনার সামগ্রী ffffset.y বৃদ্ধি করতে হবে। আটকাচ্ছে যা উল্লম্ব দিকে স্ক্রোলভিউ স্ক্রোলটি থামিয়ে দেয়।

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

উপরের কোডটি এ xএবং yএর পরিবর্তনগুলি প্রতিরোধ করে scrollview contentOffsetএবং এটি scrollViewDidScroll:পদ্ধতিতে স্ক্রোলিং বন্ধ করে দেয় ।


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

14
এটি হ্যাকের ধরণ, তবে অন্য সমস্ত ব্যর্থ হলে এটি কাজ করে। সুতরাং +1, তবে কেবলমাত্র সর্বশেষ উপায় হিসাবে ব্যবহার করুন।
i_am_jorf

4
আমি এই প্রতিনিধি পদ্ধতিটিও ব্যবহার করি, তবে আমি দেহটি এক-লাইনারের সাথে প্রতিস্থাপন করি, যেমন: scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);অনুভূমিক স্ক্রোলিং অক্ষম করতে। আমি এটিকে আরও পঠনযোগ্য বলে মনে করি এটি ছোট, এবং শূন্যের জন্য পরীক্ষা করার কোনও অর্থ নেই কারণ কোডটির সাথে কার্যত এমন কোনও ওভারহেড নেই যা এই অবিশ্বাস্যভাবে চালিত হয় (অর্থাত সেকেন্ডে সর্বোচ্চ কয়েক দশকবার)।
এচেলন

কারণ আপনি "উইন্ডস্ক্রোল" এর আগে পছন্দ করে না করে "ডিডস্ক্রোল" এর পরে কনটেন্টঅফসেটটি পরিবর্তন করছেন, এবং এটি একটি হাতুড়ি সমাধান, তবে আমি নিজেও নীচে নামি নি, কারণ 18 টি upvotes এবং উত্তর 75, সুতরাং এটি ডাউনভোট করার যোগ্য নয়
লোলারুন

4
আরও সহজ, scrollView.contentOffset.y = 0.0ডেলিগেটের কার্যক্রমে উল্লম্ব স্ক্রোলিং এবং scrollView.contentOffset.x = 0.0অনুভূমিক স্ক্রোলিং বন্ধ করতে scrollViewDidScroll()ব্যবহার করুন। যাইহোক, আমি বিশ্বাস করি যে scrollView.contentSizeসমান সমান নিশ্চিত scrollView.frame.sizeকরা একটি আরও ভাল (সঠিক) সমাধান। উত্তর @ উদ্যানবিউলিউ দেখুন।
ইমাম

11

iOS7 ব্যবহারের পর থেকে

self.automaticallyAdjustsScrollViewInsets = NO;

// এবং 3 পৃষ্ঠাগুলি সহ আপনার পৃষ্ঠা স্ক্রোলার তৈরি করুন

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];

আমি মনে করি না এটি স্ক্রোলভিউয়ের স্ক্রোলিং আচরণটি অক্ষম করবে। তাই কি??
দিনেশ রাজা

self.collectionView.pagingEnabled = YES;মসৃণ স্ক্রোলিংয়ের সাথে সমস্যাটি সমাধান করতে আমাকে সহায়তা করেছে (টেনে আনছে না)। সমস্যাটি পদ্ধতিতে ছিল scrollViewWillEndDragging:- টার্গেটকন্টেন্টএফসেটটি স্ক্রোলভিউ.কন্টেন্টঅফসেটের মতোই ছিল এবং পৃষ্ঠা সনাক্তকারী লজিক সঠিকভাবে কাজ করে না।
সিগ করুন

11

দ্রুত সমাধান

দুটি আউটলেট তৈরি করুন, একটি আপনার দেখার জন্য এবং একটি আপনার স্ক্রোল দর্শনের জন্য:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

তারপরে আপনার ভিউডিডলআউটসুভিউগুলিতে আপনি নিম্নলিখিত কোডটি যুক্ত করতে পারেন:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

আমরা যা করেছি তা হল দর্শনের উচ্চতা এবং প্রস্থ সংগ্রহ করা এবং এটির সাথে মিলে স্ক্রোলভিউজের সামগ্রীর আকার সেট করা। এটি আপনার স্ক্রোলভিউটিকে অনুভূমিকভাবে স্ক্রোল করা থেকে বিরত রাখবে।


আরও চিন্তা:

সিজি সাইজমেক সিজিফ্লোটস ব্যবহার করে প্রস্থ এবং উচ্চতা নেয়। দ্বিতীয় প্যারামিটারের জন্য আপনাকে আপনার ইউআইএসক্রোলভিউ বিদ্যমান উচ্চতা ব্যবহার করতে হতে পারে। যা দেখতে এই রকম হবে:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)

আপনি যদি উচ্চতা বা প্রস্থ (সর্বজনীন ডিভাইস) না জানেন? @ উদ্যানবিউলিওউ
লুকেশিভি

@ লুকসআইভি "মাইভিউ.ফ্রেমে.উইথ" গতিশীলভাবে "মাইভিউ" আইবিউলেট থেকে প্রস্থটি টানছে।
ড্যান

4

আমার ক্ষেত্রে, সুইফট ৪.২ দিয়ে আপনি ব্যবহার করতে পারেন:

উল্লম্ব স্ক্রোলটি অক্ষম করুন:

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

অনুভূমিক স্ক্রোলটি অক্ষম করুন:

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

3

এর পরে আপনি অধীনে, দৃশ্য নির্বাচন করতে পারেন Attributes Inspectorআনচেক User Interaction Enabled


3

আমার ক্ষেত্রে কন্টেন্টভিউয়ের প্রস্থটি ইউআইএসক্রোলভিউয়ের প্রস্থের চেয়ে বেশি ছিল এবং এটি অনাকাঙ্ক্ষিত অনুভূমিক স্ক্রোলিংয়ের কারণ ছিল। আমি এটি ইউআইস্ক্রোলভিউয়ের প্রস্থের সমান কন্টেন্টভিউয়ের প্রস্থ নির্ধারণ করে সমাধান করেছি।

আশা করি এটি কাউকে সাহায্য করবে


@ নস্ট্রাডামাস সাহায্য করতে পেরে খুশি
গল্ফাম খান

0

আমার কাছে টেবিলভিউ সামগ্রীটি অন্তর্ভুক্ত করা হয়েছেডিউলডে সেট করুন (নীচে হিসাবে) যে অনুভূমিক স্ক্রোলিংয়ের কারণ

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

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


0

আমি এই এবং অন্যান্য থ্রেডের বিভিন্ন পরামর্শ ব্যর্থ চেষ্টা করে কিছু সময়ের জন্য এটির সাথে লড়াই করেছি।

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

তাই আমি বেমানান ফলাফলগুলির সাথে সীমাবদ্ধতার বিভিন্ন সমন্বয় চেষ্টা করেছি। পরিশেষে আমার পক্ষে যা কাজ হয়েছিল তা হ'ল স্ক্রোলভিউতে -32 এর শীর্ষস্থানীয় এবং অনুসরণীয় সীমাবদ্ধতা যুক্ত করা এবং 320 (এবং কেন্দ্রিক) প্রস্থ সহ একটি (অদৃশ্য) পাঠ্যদর্শন যুক্ত করা।


0

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

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];

0

contentOffsetসাবক্লাসে সম্পত্তি ওভাররাইড করে অনুভূমিক স্ক্রোলিং অক্ষম করুন ।

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

0

আইওএস 11-এ পরিচিত একটি নতুন সম্পত্তি UIScrollView

var contentLayoutGuide: UILayoutGuide

ডকুমেন্টেশনে বলা হয়েছে যে আপনি:

আপনি যখন কোনও স্ক্রোল দর্শনের সামগ্রী ক্ষেত্রের সাথে সম্পর্কিত স্বয়ংক্রিয় বিন্যাস সীমাবদ্ধতা তৈরি করতে চান তখন এই বিন্যাস গাইডটি ব্যবহার করুন।

অন্য কোন স্বয়ংক্রিয়-বহির্বিন্যাস সীমাবদ্ধতার আপনাকে জুড়তে করা যেতে পারে যে আপনার সীমাবদ্ধ করতে চাইবেন বরাবর widthAnchorএর UIScrollView'র contentLayoutGuide"ফ্রেম" হিসাবে একই আকার যাবে। আপনি frameLayoutGuide(আইওএস 11 এও প্রবর্তিত) বা যে কোনও বাহ্যিক প্রস্থ (যেমন আপনার superViewএর) ব্যবহার করতে পারেন

উদাহরণ:

NSLayoutConstraint.activate([
  scrollView.contentLayoutGuide.widthAnchor.constraint(equalTo: self.widthAnchor)
])

ডকুমেন্টেশন: https://developer.apple.com/docamentation/uikit/uiscrolview/2865870- কনটেন্টলআউটগাইড


-1

আমি একবার এটি ইউআইএসক্রোলভিউয়ের পরিবর্তে কেবলমাত্র 1 টি সেল দিয়ে একটি ইউআইটিবেবল ভিউ দিয়ে প্রতিস্থাপন করেছি, এটি দুর্দান্ত কাজ করেছে।


4
দুঃখিত, এটি প্রশ্নের উত্তর দেয় না।
ডেভিড

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