স্ক্রিনে বিষয়বস্তুটি ফিট হয়ে গেলে কীভাবে ইউআইটিএবলভিউ টেবিলটিতে স্ক্রোলিং অক্ষম করবেন


240

আমার আইফোন অ্যাপে কয়েকটি (গোষ্ঠীযুক্ত শৈলী) টেবিল রয়েছে (কেবলমাত্র পর্দার অংশে এবং Interface Builderযদিও যোগ করা হয়েছে , এটি থেকে সাবক্ল্যাস করা হয়নি UITableViewController) যে 80% সময় ছোট এবং স্ক্রিনে ফিট হবে। যখন টেবিলটি স্ক্রিনে ফিট করে, আমি এটিকে কিছুটা পরিষ্কার করার জন্য, স্ক্রোলিংটি অক্ষম করতে চাই। তবে যদি টেবিলটি পর্দার বাইরে চলে যায় (যখন সারিগুলি পরে এতে যুক্ত করা হয়), আমি আবার স্ক্রোলিং সক্ষম করতে চাই (কারণ অন্যথায় আপনি সেই সামগ্রীটি দেখতে পারবেন না))

এই কাজ করতে একটি উপায় আছে কি? আমি এটি খুঁজে বের করতে পারে বলে মনে হয় না। আমি করতে জানি:

tableView.scrollEnabled = NO;

তবে আমি নিশ্চিত নই যে কোথায়, বা যদি আমাকে টেবিল অবজেক্টের আকার বা এটি কাজ করতে কিছু গণনা করতে হয়।


আপডেট : অবশেষে আমার জন্য কাজ করা সমাধানটি এখানে:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }

আমি reloadDataটেবিলে ফোন করার পরে এই কোডটি চালিত করি এবং এটি সঠিক মাপের গণনা করে এবং কাজ করে বলে মনে হয়।

table.frame.size.heightInterface Builderপর্দায় প্রদর্শিত অবজেক্টের আসল আকার (আপনি এটি এতে দেখতে পাচ্ছেন ), যেখানে table.contentSize.heightএর উচ্চতা: শিরোনাম, পাদচরণ এবং প্রতিটি ঘরের উচ্চতা এক সাথে যুক্ত করা হয়।


1
ধন্যবাদ। এই সমাধানটি আমার পক্ষে কাজ করেছিল। যাইহোক, আমি স্ক্রোলএইনবেবল অক্ষম করতে ইউআইটিএবলভিউ এবং ওভাররাইডিং পুনরায়লোড ডেটা প্রসারিত করে শেষ করেছি। কারণটি হল আমার ভিউ কন্ট্রোলারটি তৈরি করা হলে টেবিল ভিউ লোড হয়। এইভাবে আপনাকে পুনরায় লোডডাটাতে দুবার কল করতে হবে না।
ব্র্যান্ডন ও'রউড়কে

@ জো ব্লো আমার মনে হয় আপনি ওপি'র বক্তব্য মিস করেছেন। প্রশ্নটি কীভাবে বাউন্সকে অক্ষম করবেন না, যখন টেবিলভিউতে স্ক্রোল করার দরকার হয় কেবল তখনই কীভাবে স্ক্রোলিং (এবং সম্ভবত বাউন্স) সক্ষম করবেন।
কাইল Clegg

সীমানা ব্যবহার করা আরও ভাল, কারণ আমি মনে করি আপনি যদি আপনার টেবিলটি কিছুটা ঘোরান তবে ফ্রেম.হাইটটি পরিবর্তন হতে চলেছে।
রিকার্ডো

থাকা উচিত যদি (table.contentSize.height <= table.frame.size.height)
Grzegorz Krukowski

উত্তর:


396

আমি মনে করি আপনি সেট করতে চান

tableView.alwaysBounceVertical = NO;

6
আপনি যখন অটোলআউট ব্যবহার করছেন তখন এটি কন্টেন্টসাইজ <ফ্রেমের চেয়ে আরও ভাল কাজ করে। উত্তর গ্রহণ করা উচিত।
জোশুয়া ডান্স

1
আমি অটো লেআউটটি ব্যবহার করছি এবং এই উত্তরটি আমার যা প্রয়োজন ঠিক তা হ'ল।
গোল্ডেন থাম্ব

3
স্ক্রোলিং অক্ষম করার চেয়ে ভাল
কিরীট ওয়াঘেলা

5
কবজির মতো কাজ করে, আপনি interface builderঅন্টিকিং বাউন্স এবং অনুভূমিকভাবে / উলম্বভাবে বাউন্স করে এটি অক্ষম করতে পারেন ।
আহসান ইব্রাহিম

11
সুইফ্টের জন্য - টেবিল ভিউ.আলওয়েজবাউন্সটিভিট = মিথ্যা
সুইফটবয়

44

আপনি এই ফাংশনটি ব্যবহার করে দৃশ্যমান কক্ষগুলির সংখ্যা যাচাই করতে পারবেন:

- (NSArray *)visibleCells

এই পদ্ধতিটি দৃশ্যমান কক্ষগুলির সাথে একটি অ্যারের ফিরিয়ে দেবে, যাতে আপনি এই অ্যারেতে অবজেক্টের সংখ্যা গণনা করতে পারেন এবং আপনার টেবিলের অবজেক্টের সংখ্যার সাথে তুলনা করতে পারেন .. যদি এটি সমান হয় .. আপনি ব্যবহার করে স্ক্রোলিং অক্ষম করতে পারেন:

tableView.scrollEnabled = NO;

@ জিন্নি যেমন উল্লেখ করেছেন .. আমাদের আংশিক দৃশ্যমান কোষগুলির সাথে সমস্যা হতে পারে, সুতরাং এই সমাধানটি এই ক্ষেত্রে আরও ভাল কাজ করে:

tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));

আপনি যদি স্বয়ংক্রিয়ভাবে এই সমাধানটি সমাধান করেন তবে এই কাজটি করুন:

tableView.alwaysBounceVertical = NO.

ধন্যবাদ! এটি বেশিরভাগ ক্ষেত্রে এখন আমার জন্য কাজ করছে। কেবলমাত্র আমার এখন সমস্যা হ'ল যখন কোষগুলি আংশিকভাবে দৃশ্যমান হয় তারা এখনও দৃশ্যমান হিসাবে গণ্য হয় এবং এইভাবে যখন আমি এটি সক্ষম করতে চাই তখন স্ক্রলিং অক্ষম হয়ে যায়।
জিনি

6
এটি বের করে! দেখা যাচ্ছে যে আংশিক দৃশ্যমান সেল সমস্যার কারণে আপনি দৃশ্যমান সেলগুলি মোটেই ব্যবহার করতে পারবেন না, তবে এটি কাজ করে: if (table.contentSize.height < table.frame.size.height)>> মূল পোস্টে সম্পাদনা দেখুন।
জিনি

42

সুইফটে:

tableView.alwaysBounceVertical = false

18
আমি সর্বদা এই জাতীয় অ্যাডভান্সউইরিসেস "পুনরায় লেখাগুলি" উপস্থাপন করি কারণ আধুনিক সিনট্যাক্সে রূপান্তর করা সময়ের প্রয়োজন।
দিমিত্রি evশাভ

14

সুতরাং একাধিক উত্তর আছে এবং একসাথে সমস্ত সামগ্রীর প্রয়োজন যাতে আমি এই উত্তরটি যুক্ত করছি:

আপনি যদি অটোলআউট ব্যবহার করছেন তবে এটি সেট করে কেবল আপনার জন্য কাজ করা উচিত:

  • কোডে:

tableView.alwaysBounceVertical = false

  • বা ইন্টারফেস বিল্ডারে:

এই বিকল্প এবং বিকল্পটি untick" Bounce Vertically" সন্ধান করুন।

এখানে উল্লেখ:

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

যদি আপনি অটোলআউট ব্যবহার না করেন:

 override func viewDidLayoutSubviews() {
    // Enable scrolling based on content height
    tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
 }

13

এটা চেষ্টা কর

[yourTableView setBounces:NO];

@ কাইল - নোটের জন্য ধন্যবাদ! - তবে দেখুন যা স্বয়ংক্রিয়ভাবে ঘটে। এটি যদি স্ক্রিনের চেয়ে ছোট (বা অন্যান্য ধারক) হয় তবে এটি স্ক্রোল করে না (এবং স্পষ্টতই বাউন্স করবে না, কোজ এটি এমনকি স্ক্রোলও করবে না)। এটি যদি স্ক্রিনের চেয়ে দীর্ঘ হয় তবে এটি স্ক্রোল করবে (এবং প্রকৃতপক্ষে বাউন্স)। কোন ??
ফ্যাটি

সম্ভবত আমি সংগ্রহের ভিউগুলি খুব বেশি ব্যবহার করেছি ... সম্ভবত সংগ্রহের দর্শনগুলির জন্য বর্ণনা হিসাবে এটি কাজ করে তবে ইউআইটিবেল ভিউয়ের জন্য নয় ??
ফ্যাটি

9

আপনি স্ক্রোল ভিউ অঞ্চলে এগুলি নির্বাচন / নির্বাচন না করে টেবিলভিউটি সক্ষম / অক্ষম বাউন্স বা স্ক্রোলিং সেট করতে পারেন

সম্পাদনা অঞ্চলটি স্ক্রোল করুন


3

আপনি আপনার স্টোরিবোর্ডে এটি সম্পাদনা করতে পারেন (যদি আপনি এটি ব্যবহার করে থাকেন)। টেবিল দৃশ্যের নীচে একটি চেকবক্স রয়েছে যা "স্ক্রোলিং সক্ষম করে" বলে। এটি আনচেক করুন এবং আপনার কাজ শেষ হয়েছে।


3

// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;


3
আমি মনে করি আপনার সমাধানটি পড়ে আমি আলোকিত হয়েছি। অনেক ধন্যবাদ
আরশ

আমি আমার ভিউডআইড এয়ারে এটি ব্যবহার করেছি
মারিয়া

1
আমার অর্থ ভিডিডিআলআউটসুভিউগুলি ভিডিডআইপিয়ার
মারিয়া নয়

0

আমার বিশ্বাস মতো একটি টেবিলভিউ ঘরের জন্য ডিফল্ট উচ্চতা 44.0f। আপনি অবশ্যই একটি অ্যারে আপনার ডেটাসোর্স হাতে রেখেছেন? তারপরে [array count]*44.0fফ্রেম সীমার বাইরে গিয়ে যদি সেট করা থাকে তবে তা পরীক্ষা করে দেখুন tableview.scrollEnabled = NO, অন্যথায় এটি হ্যাঁ সেট করুন। সেই নির্দিষ্ট টেবিলভিউয়ের জন্য আপনি যেখানে ডেটাসোর্সটি খুঁজে পেয়েছেন তা করুন।


আমার টেবিলের ঘরগুলি বিভিন্ন আকারের (এবং যে কোনও সময় আকার পরিবর্তন হতে পারে; আমি উচ্চতাফোর্ডঅ্যান্ড ইন্ডেক্সপথ পদ্ধতিটি ব্যবহার করছি) তাই আমি সম্ভবত ৪৪.০f হার্ডকোড করতে চাই না। আমি বিশ্বাস করি যে নাম্বারটি টেবিল ভিউয়ের মতো একই? হাইহাইট যাইহোক?
জিনি

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

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