ইউআইএসট্যাকভিউয়ের পক্ষে স্ক্রোল করা কি সম্ভব?


210

ধরা যাক আমি ইউআইএসট্যাকভিউতে আরও ভিউ যুক্ত করেছি যা প্রদর্শিত হতে পারে, আমি কীভাবে UIStackViewস্ক্রোলটি তৈরি করতে পারি ?


আপনি কেন সামগ্রীর জন্য (বা একাধিক) স্ট্যাক দর্শন সহ একটি স্ক্রোল ভিউ ব্যবহার করছেন না?
ঋক্ষমণ্ডল

2
এক-বাক্য সমাধানটি হ'ল প্রস্থের জন্য আপনি পিতামাতার স্ট্রাক ভিউ নয় , পিতামাতার স্ক্রোল ভিউতে নিয়ন্ত্রণ-টানুন । আমার উত্তরে ব্যাখ্যা!
ফ্যাটি

আইওএস-এ ইউআইএসক্রলভিউয়ের মধ্যে ইউআইএসট্যাকভিউকে এম্বেড করার পদ্ধতি কীভাবে github.com/onmyway133/blog/issues/324
onwayway133

আইওএস-এ এই সমালোচনামূলক প্রশ্ন সম্পর্কে। বাস্তবে এটি করার দুটি (এবং মাত্র দুটি) উপায় রয়েছে - এগুলি করার একমাত্র উপায় এবং আপনার অবশ্যই দুটি পদ্ধতির একটি অবশ্যই অনুসরণ করতে হবে । নীচে আমার উত্তর সর্বদা আপডেট করা হয়।
ফ্যাটি

হ্যাঁ. আপনার ইউআইএসক্রোলভিউয়ের সামগ্রী ভিউ হিসাবে একটি মধ্যবর্তী ইউআইভিউ থাকা আবশ্যক। তারপরে ইউআইএসট্যাকভিউকে সামগ্রী প্রদর্শনের চাইল্ড ভিউ হিসাবে রাখুন। raywenderlich.com/…
poGUIst

উত্তর:


577

যদি কেউ কোড ছাড়াই সমাধান খুঁজছেন , অটো লেআউট ব্যবহার করে স্টোরিবোর্ডে এটি পুরোপুরি করার জন্য আমি একটি উদাহরণ তৈরি করেছি।

আপনি এটি গিথুব থেকে পেতে পারেন ।

মূলত, উদাহরণটি পুনরায় তৈরি করতে (উল্লম্ব স্ক্রোলিংয়ের জন্য):

  1. একটি তৈরি করুন UIScrollViewএবং তার সীমাবদ্ধতাগুলি সেট করুন ।
  2. একটিতে যুক্ত UIStackViewকরুনUIScrollView
  3. সীমাবদ্ধতার সেট করুন: Leading, Trailing, Top& Bottomথেকে বেশী সমান হওয়া উচিতUIScrollView
  4. এবং এর Widthমধ্যে সমান সীমাবদ্ধতা সেট আপ করুন ।UIStackViewUIScrollView
  5. অক্ষটি = উল্লম্ব, প্রান্তিককরণ = পূরণ, বিতরণ = সমান ব্যবধান এবং স্পেসিং = 0 সেট করুন UIStackView
  6. এর সাথে একটি সংখ্যা যুক্ত UIViewsকরুনUIStackView
  7. চালান

এক্সচেঞ্জ Widthজন্য Heightপদক্ষেপ 4, এবং সেট Axis= Horizontalপদক্ষেপ 5, একটি অনুভূমিক UIStackView জন্য।


55
ধন্যবাদ! "4. ইউআইএসট্যাকভিউ এবং ইউআইএসক্রোলভিউয়ের মধ্যে সমান প্রস্থের সীমাবদ্ধতা সেট আপ করুন।" কী ছিল;)
ফাঁকা

19
Number নম্বরও গুরুত্বপূর্ণ। কোডে সমস্ত দর্শন যুক্ত করতে চেয়েছিল কিন্তু তারপরে অটো লেআউট আইবিতে অনুপস্থিত প্রতিবন্ধকতা দেখায়।
প্রাক

11
হাই হাইস, মনে হচ্ছে এই সমাধানটি অনুভূমিক স্ক্রোলিংয়ের জন্য কাজ করে না। পদক্ষেপ 4 এ, সমান প্রস্থ নির্ধারণের পরিবর্তে, আমি সমান উচ্চতা এবং অক্ষ = অনুভূমিক সেট করার জন্য অনুমান করি। আমি চেষ্টা করেছিলাম এবং কাজ করে না।
সেতো এলকাহাফি

5
একটি সীমাবদ্ধতা যুক্ত করা যাতে স্ট্যাকভিউ এবং স্ক্রোলভিউ সমান প্রস্থ হয় ইন্টারফেস নির্মাতা থেকে সতর্কতাগুলি সরিয়ে ফেলবে, তবে তারপরে স্ক্রোলিং অক্ষম করা হবে। শুধুমাত্র স্ক্রোলিং ঘটে যখন scrollview ভিতরে বিষয়বস্তু দৃশ্য বৃহত্তর scrollview চেয়ে!
জেসন মুর

6
Point দফায় বিশদভাবে বর্ণনা করতে যদি স্ট্যাক ভিউতে কোনও উপাদান না থাকলেও সমস্ত প্রতিবন্ধকতা জায়গায় রয়েছে, আপনি "ওয়াই পজিশন বা উচ্চতার জন্য স্ক্রোল ভিউ সীমাবদ্ধতার প্রয়োজন" পেয়েছেন। স্ট্যাক ভিউতে কেবল একটি লেবেল যুক্ত করা এই সতর্কতাটি দূরে সরিয়ে দেয়!
ফয়সাল মেমন

45

অ্যাপলের অটো লেআউট গাইড সহ স্ক্রোল দর্শনগুলির সাথে কাজ করার একটি সম্পূর্ণ বিভাগ অন্তর্ভুক্ত । কিছু প্রাসঙ্গিক স্নিপেটস:

  1. স্ক্রোল ভিউয়ের সম্পর্কিত প্রান্তগুলিতে সামগ্রী ভিউয়ের শীর্ষ, নীচে, শীর্ষস্থানীয় এবং পিছনের প্রান্তগুলিকে পিন করুন। বিষয়বস্তু দর্শন এখন স্ক্রোল দর্শনের সামগ্রীর ক্ষেত্রের সংজ্ঞা দেয়।
  2. (Alচ্ছিক) অনুভূমিক স্ক্রোলিং অক্ষম করতে, সামগ্রী স্কোরলটির প্রস্থকে স্ক্রোল দর্শনের প্রস্থের সমান করুন। সামগ্রীর দর্শন এখন অনুভূমিকভাবে স্ক্রোল ভিউ পূরণ করে।
  3. (Alচ্ছিক) উল্লম্ব স্ক্রোলিং অক্ষম করতে, সামগ্রী স্ক্রোল দেখার উচ্চতার সমান কন্টেন্ট ভিউয়ের উচ্চতা সেট করুন। সামগ্রীর দর্শন এখন অনুভূমিকভাবে স্ক্রোল ভিউ পূরণ করে।

উপরন্তু:

আপনার বিন্যাসে অবশ্যই সামগ্রীর ভিউয়ের আকারটি পুরোপুরি সংজ্ঞায়িত করতে হবে (5 এবং 6 ধাপে সংজ্ঞায়িত ব্যতীত)। … যখন সামগ্রী ভিউ স্ক্রোল ভিউয়ের চেয়ে লম্বা হয়, তখন স্ক্রোল ভিউ উল্লম্ব স্ক্রোলিং সক্ষম করে। কন্টেন্ট ভিউ যখন স্ক্রোল ভিউয়ের চেয়ে প্রশস্ত হয় তখন স্ক্রোল ভিউ অনুভূমিক স্ক্রোলিং সক্ষম করে।

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

// Pin the edges of the stack view to the edges of the scroll view that contains it
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

// Set the width of the stack view to the width of the scroll view for vertical scrolling
stackView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true

1
ধন্যবাদ, তবে উচ্চতার সীমাবদ্ধতা বাদ দেওয়া (উল্লম্ব স্ক্রোলিংয়ের জন্য অনুমতি দেওয়ার জন্য) এই ত্রুটিটি স্টোরিবোর্ডে দেয়: Need constraints for: Y position or height.আপনি যদি স্ট্যাক ভিউর জন্য প্রস্থ এবং উচ্চতা উভয়ই সীমাবদ্ধ করেন, তবে উল্লম্ব স্ক্রোলিং অক্ষম করে তবেই এই ত্রুটিটি চলে যায়। এই কোডটি এখনও আপনার জন্য কাজ করে?
ক্র্যাশলোট

@ ক্র্যাশলোট সেই ত্রুটিটি দূর করতে আপনাকে স্ট্যাক ভিউতে একটি সংক্ষিপ্তসার যুক্ত করতে হবে; নীচে আমার উত্তর দেখুন।
পেকম্ব

16

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

আমি দুটি বিষয়ে হিট করেছি যদিও অন্যদের সম্পর্কে সচেতন হওয়া উচিত:

  1. গৃহীত উত্তরের মতো সীমাবদ্ধতা যুক্ত করার পরে, আমি লাল অটোলেআউট ত্রুটি পেয়ে যাব Need constraints for: X position or width। এটি স্ট্যাক ভিউর একটি সংক্ষিপ্তসার হিসাবে একটি ইউআইএলবেল যোগ করে সমাধান করা হয়েছিল।

    আমি প্রোগ্রামগুলি সাবভিউগুলি যুক্ত করছি, সুতরাং মূলত স্টোরিবোর্ডে আমার কোনও পূর্বরূপ ছিল না। অটোলেআউট ত্রুটিগুলি থেকে মুক্তি পেতে স্টোরিবোর্ডে একটি সংক্ষিপ্তসার যুক্ত করুন, তারপরে আপনার আসল মতামত এবং সীমাবদ্ধতাগুলি যুক্ত করার আগে লোডে এটিকে সরান।

  2. আমি মূলত UIButtonsইউআইএসট্যাকভিউতে যুক্ত করার চেষ্টা করেছি। বোতাম এবং দর্শনগুলি লোড হবে তবে স্ক্রোল ভিউ স্ক্রোল করবে না । এটি UILabelsবোতামগুলির পরিবর্তে স্ট্যাক ভিউতে যুক্ত করে সমাধান করা হয়েছিল । একই সীমাবদ্ধতাগুলি ব্যবহার করে, ইউআইএলবেলস স্ক্রোলগুলির সাথে এই দৃষ্টিভঙ্গি শ্রেণিবিন্যাস করলেও ইউআইবাটনগুলি তা করে না।

    আমি এই বিষয়টি দ্বারা বিভ্রান্ত করছি যেমন UIButtons না একটি IntrinsicContentSize (স্ট্যাক দর্শন দ্বারা ব্যবহৃত) আছে বলে মনে হচ্ছে। যদি কেউ জানেন যে কেন বোতামগুলি কাজ করে না, আমি কেন তা জানতে পছন্দ করব।

রেফারেন্সের জন্য এখানে আমার দর্শন শ্রেণিবদ্ধতা এবং সীমাবদ্ধতা রয়েছে:

স্ক্রোল ভিউতে স্ট্যাক ভিউয়ের সীমাবদ্ধতা [1]


3
আপনি কেবল আমাকে দেওয়াল এবং হতাশার বিরুদ্ধে ঘন্টার মাথায় ঘণ্টার একগুচ্ছ বাঁচিয়েছিলেন, আমি ঠিক একই পরিস্থিতিতে আছি এবং সতর্কতার কারণটি বুঝতে পারি না এবং কেন বোতামগুলির সাথে কাজ করছে না। কেন অ্যাপল !?
পাকিতোভি

15

যেমন এক বলেছেন, UIStackViewএবং UIScrollViewএকসাথে সুন্দর খেলুন, এখানে দেখুন

মূলটি হ'ল UIStackViewবিভিন্ন বিষয়বস্তুর জন্য পরিবর্তনশীল উচ্চতা / প্রস্থকে পরিচালনা করে এবং UIScrollViewতারপরে সেই বিষয়টিকে স্ক্রোলিং / বাউন্স করা ভালভাবে করে:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.contentSize = CGSize(width: stackView.frame.width, height: stackView.frame.height)       
}

2
স্ক্রোলযোগ্য স্ট্যাক দর্শনটির অনুমতি দেওয়ার জন্য ম্যানুয়াল এবং অটো লেআউট একত্রিত করার প্রয়োজন নেই। আপনাকে কেবল স্ট্যাক ভিউটির প্রস্থ এবং / বা উচ্চতা সীমাবদ্ধ করতে হবে। সম্পর্কিত উত্তর এবং প্রাসঙ্গিক অ্যাপল ডক্সের একটি লিঙ্কের জন্য আমার উত্তর দেখুন।
টাইটানিয়ামডেকয়

গিথুব উদাহরণটি পুরোপুরি কাজ করেছিল এবং খুব স্পষ্ট ছিল। ভাগ করে নেওয়ার জন্য ধন্যবাদ.
বেহর

stackView.translatesAutoresizingMaskIntoConstraints = মিথ্যা, এটি আমার ক্ষেত্রে কৌশলটি করেছে
হাওল জেনকিনস

10

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

সংক্ষিপ্ত বিবরণ, আপনার এম্বেড UIStackView এবং UIScrollViewএর UIStackViewসাথে মিলে যাওয়ার অ্যাঙ্কর সীমাবদ্ধতাগুলি সেট করুন UIScrollView:

stackView.leadingAnchor.constraintEqualToAnchor(scrollView.leadingAnchor).active = true
stackView.trailingAnchor.constraintEqualToAnchor(scrollView.trailingAnchor).active = true
stackView.bottomAnchor.constraintEqualToAnchor(scrollView.bottomAnchor).active = true
stackView.topAnchor.constraintEqualToAnchor(scrollView.topAnchor).active = true
stackView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true

দয়া করে একাধিক প্রশ্নের একই উত্তর যুক্ত করবেন না । সেরাটির উত্তর দিন এবং বাকীটিকে সদৃশ হিসাবে চিহ্নিত করুন। দেখুন বেশ কয়েকটি প্রশ্নের সদৃশ উত্তর যুক্ত করা কি গ্রহণযোগ্য?
ফেলিক্সএসএফডি

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

9

2020-এর জন্য আপ টু ডেট।

100% স্টোরিবোর্ড বা 100% কোড।


এখানে সম্ভাব্যতম সহজ ব্যাখ্যা:

  1. একটি ফাঁকা পূর্ণ-পর্দার দৃশ্য রয়েছে

  2. একটি স্ক্রোল ভিউ যুক্ত করুন। স্ক্রোল ভিউ থেকে বেস ভিউতে নিয়ন্ত্রণ-টানুন , বাম-ডান-উপরে-নীচে, সমস্ত শূন্য যুক্ত করুন add

  3. স্ক্রোল ভিউতে একটি স্ট্যাক ভিউ যুক্ত করুন। স্ট্যাক ভিউ থেকে স্ক্রোল ভিউতে নিয়ন্ত্রণ-টানুন , সমস্ত শূন্য বাম-ডান-উপরে-নীচে যুক্ত করুন।

  4. স্ট্যাক ভিউয়ের ভিতরে দুটি বা তিনটি লেবেল রাখুন।

স্বচ্ছতার জন্য, লেবেলের পটভূমির রঙটি লাল করুন। লেবেলের উচ্চতা 100 এ সেট করুন।

  1. এখন প্রতিটি ইউআইএলবেলের প্রস্থ নির্ধারণ করুন :

    আশ্চর্যের বিষয় হল, স্ট্যাক ভিউতে নয়UILabel , স্ক্রোল ভিউতে নিয়ন্ত্রণ-টানুন এবং সমান প্রস্থ নির্বাচন করুন ।

পুনরাবৃত্তি করতে:

UILabel এর পিতামাতাকে UILabel থেকে টেনে আনতে নিয়ন্ত্রণ করবেন না - দাদির কাছে যান। (অন্য কথায়, সমস্ত দিকে স্ক্রোল ভিউতে যান, স্ট্যাক ভিউতে যাবেন না))

এটা খুব সহজ। এটাই রহস্য।

গোপন টিপ - অ্যাপল বাগ:

এটি কেবল একটি আইটেম দিয়ে কাজ করবে না ! ডেমোটির কাজ করতে কয়েকটি লেবেল যুক্ত করুন।

তুমি করেছ.

টিপ: আপনার অবশ্যই প্রতিটি নতুন আইটেমের সাথে একটি উচ্চতা যুক্ত করতে হবে । যে কোনও স্ক্রোলিং স্ট্যাক ভিউতে প্রতিটি আইটেমের একটি অন্তর্নির্মিত আকার (যেমন একটি লেবেল) থাকতে হবে বা একটি স্পষ্ট উচ্চতার সীমাবদ্ধতা যুক্ত করতে হবে।


বিকল্প পদ্ধতি:

উপরের অংশে: আশ্চর্যরূপে, ইউআইএলবেলগুলির প্রস্থগুলি স্ক্রোল দর্শনের (স্ট্যাক ভিউ নয়) প্রস্থে সেট করুন।

অথবা ...

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

সুতরাং আপনার কাছে দুটি বিকল্প রয়েছে:

  1. আশ্চর্যের বিষয় হল, স্ট্যাক ভিউতে প্রতিটি আইটেমের প্রস্থকে স্ক্রোলভিউ পিতামাতার ( স্ট্যাকভিউ প্যারেন্ট নয় ) প্রশস্ত করুন

অথবা

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

পরিষ্কার হওয়ার জন্য, এই পদ্ধতিগুলির মধ্যে একটি করুন, দুটিই করবেন না।


8

অনুভূমিক স্ক্রোলিং (ইউআইএসক্রোলভিউয়ের মধ্যে ইউআইএসট্যাকভিউ)

অনুভূমিক স্ক্রোলিংয়ের জন্য। প্রথমে একটি UIStackViewএবং একটি তৈরি UIScrollViewকরুন এবং সেগুলি নিম্নলিখিত উপায়ে আপনার দৃষ্টিতে যুক্ত করুন:

let scrollView = UIScrollView()
let stackView = UIStackView()

scrollView.addSubview(stackView)
view.addSubview(scrollView)

সেট করতে মনে translatesAutoresizingMaskIntoConstraintsকরতে falseউপর UIStackViewএবং UIScrollView:

stackView.translatesAutoresizingMaskIntoConstraints = false
scrollView.translatesAutoresizingMaskIntoConstraints = false

পিছনে কাজ করা, শীর্ষস্থানীয়, শীর্ষ এবং নীচের অ্যাঙ্করগুলির সমস্ত কিছু অ্যাঙ্কারের UIStackViewসমান হওয়া উচিত UIScrollView:

stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

তবে অবশ্যই প্রস্থের অ্যাঙ্করটির অ্যাঙ্কারের প্রস্থের UIStackViewসমান বা বড় হতে হবে UIScrollView:

stackView.widthAnchor.constraint(greaterThanOrEqualTo: scrollView.widthAnchor).isActive = true

এখন আপনার অ্যাঙ্কর করুন UIScrollView, উদাহরণস্বরূপ:

scrollView.heightAnchor.constraint(equalToConstant: 80).isActive = true
scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true

scrollView.bottomAnchor.constraint(equalTo:view.safeAreaLayoutGuide.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo:view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo:view.trailingAnchor).isActive = true 

এর পরে, আমি UIStackViewপ্রান্তিককরণ এবং বিতরণের জন্য নিম্নলিখিত সেটিংস চেষ্টা করার পরামর্শ দেব :

topicStackView.axis = .horizontal
topicStackView.distribution = .equalCentering
topicStackView.alignment = .center

topicStackView.spacing = 10

অবশেষে addArrangedSubview:আপনার ইউআইএসট্যাকভিউতে সাবউভিউ যুক্ত করতে আপনাকে পদ্ধতিটি ব্যবহার করতে হবে ।

পাঠ্য কীটপতঙ্গ

একটি অতিরিক্ত বৈশিষ্ট্যটি আপনাকে দরকারী এটি হতে পারে যে কারণ UIStackViewএকটি মধ্যে অনুষ্ঠিত হয় UIScrollViewআপনি এখন কিছু একটু সুন্দর বানাতে পাঠ্য insets এক্সেস আছে।

let inset:CGFloat = 20
scrollView.contentInset.left = inset
scrollView.contentInset.right = inset

// remember if you're using insets then reduce the width of your stack view to match
stackView.widthAnchor.constraint(greaterThanOrEqualTo: topicScrollView.widthAnchor, constant: -inset*2).isActive = true

7

এটি কেবল এতে যুক্ত করুন viewdidload:

let insets = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0)
scrollVIew.contentInset = insets
scrollVIew.scrollIndicatorInsets = insets

উত্স: https://developer.apple.com/library/ios/docamentation/UserExperience/ কনসেপ্টুয়াল / অটোলে আউটপিজি / লেআউটউসিংস্ট্যাক ভিউস html


এটি আমার অটোলেআউট + স্ক্রোলভিউয়ের জন্য কতটা বাঁচিয়েছে তা বলতে পারে না। অ্যাপল লিঙ্কে দুর্দান্ত সন্ধান করুন।
DED

কি করতে চাচ্ছ? এ ছাড়া কী হয়?
মধু

এটি কেবল স্থিতি বারের নীচে স্ক্রোল দেখার সামগ্রী রাখে।
টিউরিংস্টেস্ট

2

আপনি স্ক্রোলবলস্ট্যাকভিউ চেষ্টা করতে পারেন : https://github.com/gurhub/ScrollableStackView

এটি অবজেক্টিভ-সি এবং সুইফট সুসংগত লাইব্রেরি। এটি কোকোপডসের মাধ্যমে উপলব্ধ

নমুনা কোড (সুইফ্ট)

import ScrollableStackView

var scrollable = ScrollableStackView(frame: view.frame)
view.addSubview(scrollable)

// add your views with 
let rectangle = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 55))
rectangle.backgroundColor = UIColor.blue
scrollable.stackView.addArrangedSubview(rectangle)
// ...

নমুনা কোড (উদ্দেশ্য-সি)

@import ScrollableStackView

ScrollableStackView *scrollable = [[ScrollableStackView alloc] initWithFrame:self.view.frame];
scrollable.stackView.distribution = UIStackViewDistributionFillProportionally;
scrollable.stackView.alignment = UIStackViewAlignmentCenter;
scrollable.stackView.axis = UILayoutConstraintAxisVertical;
[self.view addSubview:scrollable];

UIView *rectangle = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 55)];
[rectangle setBackgroundColor:[UIColor blueColor]];

// add your views with
[scrollable.stackView addArrangedSubview:rectangle]; 
// ...

হাই পিটার, আসলে একটি দুর্দান্ত ধারণা! অবদান সর্বদা স্বাগত, এই জন্য একটি অনুরোধ প্রেরণে নির্দ্বিধায় অনুভব করুন। সেরা।
mgyky

0

আপনার যদি স্ট্রাক ভিউটি উল্লম্বভাবে স্ক্রোল দৃশ্যের মধ্যে কেন্দ্রে অন্তরায় থাকে তবে কেবল এটি সরিয়ে দিন।


0

উল্লম্ব স্ট্যাকভিউ / স্ক্রোলভিউয়ের উদাহরণ (অটোলেআউটটির EasyPeasyজন্য ব্যবহার করে ):

let scrollView = UIScrollView()
self.view.addSubview(scrollView)
scrollView <- [
    Edges(),
    Width().like(self.view)
]

let stackView = UIStackView(arrangedSubviews: yourSubviews)
stackView.axis = .vertical
stackView.distribution = .fill    
stackView.spacing = 10
scrollView.addSubview(stackView)
stackView <- [
    Edges(),
    Width().like(self.view)
]

কেবলমাত্র আপনার প্রতিটি পর্যবেক্ষণের উচ্চতার সংজ্ঞা দেওয়া আছে তা নিশ্চিত করুন!


0
  1. প্রথম এবং সর্বাগ্রে আপনার দৃষ্টিভঙ্গিটি ডিজাইন করুন, পছন্দসই স্কেচের মতো কিছুতে বা কোনও স্ক্রোলযোগ্য সামগ্রী হিসাবে আপনি কী চান তার ধারণা পান।

  2. এর পরে ভিউ কন্ট্রোলার মুক্ত ফর্ম তৈরি করুন (অ্যাট্রিবিউট ইন্সপেক্টর থেকে চয়ন করুন) এবং আপনার দর্শনটির অভ্যন্তরীণ সামগ্রীর আকার অনুযায়ী আকার এবং পরিমাপক থেকে চয়ন করার জন্য উচ্চতা এবং প্রস্থ সেট করুন।

  3. এর পরে ভিউ কন্ট্রোলার একটি স্ক্রোল ভিউ রাখে এবং এটি একটি যুক্তি, যা আমি প্রায় সবসময় আইওএস-এ কাজ করে যাচ্ছি (এটির জন্য এই ভিউ ক্লাসের নথিপত্রের প্রয়োজন হতে পারে যা কমান্ডের মাধ্যমে প্রাপ্ত হতে পারে + ক্লিক করুন এই ক্লাসে বা গুগলিংয়ের মাধ্যমে)

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

স্ট্যাক ভিউ নিয়ে কাজ করার সময়

  • প্রথমে গ্রাউন্ড আপ (বটমস আপ অ্যাপ্রোচ) দিয়ে শুরু করুন, অর্থাত্, যদি আপনার ভিউতে লেবেল, পাঠ্য ক্ষেত্র এবং চিত্র থাকে তবে প্রথমে এই মতামতগুলি রাখুন (স্ক্রোল দর্শনের অভ্যন্তরে) এবং তারপরে এগুলি স্ট্যাক ভিউতে রাখুন।

  • এর পরে স্ট্যাক ভিউয়ের সম্পত্তিটি স্যুইচ করুন। যদি এখনও পছন্দসই ভিউ অর্জন না করা হয় তবে অন্য স্ট্যাক ভিউটি ব্যবহার করুন।

  • যদি এখনও অর্জন না করা হয় তবে সংক্ষেপণ প্রতিরোধের বা বিষয়বস্তু আলিঙ্গনকে অগ্রাধিকার দিয়ে খেলুন।
  • এর পরে স্ট্যাক ভিউতে সীমাবদ্ধতা যুক্ত করুন।
  • উপরের সমস্তটি সন্তোষজনক ফলাফল না দিলে খালি ইউআইভিউ ফিলার ভিউ হিসাবে ব্যবহার করার কথাও ভাবেন।

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


0

নেস্টেড বা একক স্ট্যাক ভিউয়ের জন্য স্ক্রোল ভিউটি অবশ্যই রুট ভিউ সহ একটি নির্দিষ্ট প্রস্থ নির্ধারণ করতে হবে। প্রধান স্ট্যাক ভিউ যা স্ক্রোল দর্শনের অভ্যন্তরে রয়েছে একই প্রস্থটি সেট করতে হবে। [আমার স্ক্রোল ভিউ এটিকে উপেক্ষা করে দেখার মত হ'ল]

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

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


0

যদি কেউ অনুভূমিকভাবে স্ক্রোলভিউ খুঁজছেন

func createHorizontalStackViewsWithScroll() {

 self.view.addSubview(stackScrollView)
 stackScrollView.translatesAutoresizingMaskIntoConstraints = false
 stackScrollView.heightAnchor.constraint(equalToConstant: 85).isActive = true
 stackScrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
 stackScrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
 stackScrollView.bottomAnchor.constraint(equalTo: visualEffectViews.topAnchor).isActive = true
 stackScrollView.addSubview(stackView)

 stackView.translatesAutoresizingMaskIntoConstraints = false
 stackView.topAnchor.constraint(equalTo: stackScrollView.topAnchor).isActive = true
 stackView.leadingAnchor.constraint(equalTo: stackScrollView.leadingAnchor).isActive = true
 stackView.trailingAnchor.constraint(equalTo: stackScrollView.trailingAnchor).isActive = true
 stackView.bottomAnchor.constraint(equalTo: stackScrollView.bottomAnchor).isActive = true
 stackView.heightAnchor.constraint(equalTo: stackScrollView.heightAnchor).isActive = true

 stackView.distribution = .equalSpacing
 stackView.spacing = 5
 stackView.axis = .horizontal
 stackView.alignment = .fill


 for i in 0 ..< images.count {
 let photoView = UIButton.init(frame: CGRect(x: 0, y: 0, width: 85, height: 85))
 // set button image
 photoView.translatesAutoresizingMaskIntoConstraints = false
 photoView.heightAnchor.constraint(equalToConstant: photoView.frame.height).isActive = true
 photoView.widthAnchor.constraint(equalToConstant: photoView.frame.width).isActive = true

 stackView.addArrangedSubview(photoView)
 }
 stackView.setNeedsLayout()

 }

0

আপনার দৃশ্যে একটি স্ক্রোল ভিউ রাখুন এবং এটি আকার করুন যাতে এটি দৃশ্যটি পূর্ণ হয়। তারপরে, স্ক্রোল ভিউয়ের ভিতরে একটি স্ট্যাক ভিউ রাখুন এবং স্ট্যাক ভিউয়ের ভিতরে অ্যাড আইটেম বোতামটি রাখুন। যত তাড়াতাড়ি সবকিছু ঠিক আছে, নিম্নলিখিত সীমাবদ্ধতাগুলি সেট করুন:

Scroll View.Leading = Superview.LeadingMargin
Scroll View.Trailing = Superview.TrailingMargin
Scroll View.Top = Superview.TopMargin
Bottom Layout Guide.Top = Scroll View.Bottom + 20.0
Stack View.Leading = Scroll View.Leading
Stack View.Trailing = Scroll View.Trailing
Stack View.Top = Scroll View.Top
Stack View.Bottom = Scroll View.Bottom
Stack View.Width = Scroll View.Width

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

কোড: Stack View.Width = Scroll View.Widthকী।


0

ম্যাকোস অনুঘটকটির জন্য কিছু নতুন দৃষ্টিভঙ্গি যুক্ত করা হচ্ছে। যেহেতু ম্যাকোস অ্যাপ্লিকেশনগুলি উইন্ডো আকার পরিবর্তনকে সমর্থন করে, তাই সম্ভবত এটি আপনার UIStackViewকোনও অবিচ্ছেদ্য স্থিতি থেকে একটি স্ক্রোলযোগ্য স্থানে স্থানান্তরিত করা সম্ভব , বা বিপরীত। এখানে দুটি সূক্ষ্ম জিনিস রয়েছে:

  • UIStackView এটি করতে পারে এমন সমস্ত ক্ষেত্রের জন্য ডিজাইন করা হয়েছে।
  • স্থানান্তরের সময়, UIScrollViewআপনার নেভিগেশন বারের নীচে সদ্য অর্জিত / হারানো অঞ্চল (বা ম্যাকোস অ্যাপ্লিকেশানের ক্ষেত্রে সরঞ্জামদণ্ড) এর অ্যাকাউন্টে তার সীমানাকে পুনরায় আকার দেওয়ার চেষ্টা করবে।

এটি দুর্ভাগ্যক্রমে একটি অসীম লুপ তৈরি করবে। আমি অত্যন্ত পরিচিত নই UIScrollViewএবং তার adjustedContentInset, কিন্তু তার মধ্যে আমার লগ থেকে layoutSubviewsপদ্ধতি, আমি নিম্নলিখিত আচরণ দেখছি:

  • একটি উইন্ডো বড়।
  • UIScrollView এর সীমানা সঙ্কুচিত করার চেষ্টা করে (যেহেতু সরঞ্জামদণ্ডের নীচের অংশের প্রয়োজন নেই)।
  • UIStackView অনুসরণ করে।
  • কোনওভাবে UIScrollViewঅসন্তুষ্ট এবং বড় সীমানায় পুনঃস্থাপনের সিদ্ধান্ত নিন। লগ থেকে আমি যা দেখছি তা হ'ল এটি আমার কাছে খুব অদ্ভুত বোধ করে UIScrollView.bounds.height == UIStackView.bounds.height
  • UIStackView অনুসরণ করে।
  • তারপরে ধাপ 2 এ লুপ করুন।

আমার কাছে মনে হচ্ছে দুটি পদক্ষেপই সমস্যার সমাধান করবে:

  • সারিবদ্ধ UIStackView.topকরতে UIScrollView.topMargin
  • সেট contentInsetAdjustmentBehaviorকরুন .never

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

আশা করি এটি ভবিষ্যতে যে কাউকে সহায়তা করবে। ইন্টারনেটে এটি উল্লেখ করার মতো কাউকে খুঁজে পেল না এবং এটি ঘটেছিল তা খুঁজে বের করার জন্য এটি আমাকে দীর্ঘদিন ধরে আকৃষ্ট করেছিল।

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