কোনও ইউআইএসট্যাকভিউয়ের অভ্যন্তরে যোগ করার জন্য কীভাবে শীর্ষস্থানীয় প্যাডিং যুক্ত করা যায়


125

এটি আমার সেটআপ: আমার UIScrollViewশীর্ষস্থানীয়, শীর্ষ, ট্রায়ালিং প্রান্তটি 0 এ সেট আছে this এর ভিতরে আমি UIStackViewএই সীমাবদ্ধতার সাথে একটি যুক্ত করব :

stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true  
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true

স্ট্যাক ভিউয়ের ভিতরে আমি কিছু ভিউ যুক্ত করি add
আমার সমস্যাটি হ'ল সীমাবদ্ধতার কারণে প্রথম ভিউতে স্ট্যাক ভিউতে যুক্ত হওয়াতে শীর্ষস্থানীয় প্রান্ত = 0ও থাকবে।

কীভাবে কীভাবে আমি প্রথম দর্শনে কিছু প্যাডিং যুক্ত করতে পারি? স্ক্রোল দেখার সীমাবদ্ধতাগুলি সমন্বয় না করে।


2
আপনি কি আমার গৃহীত উত্তর পরিবর্তন করবেন? টোলগার উত্তর আরও ভাল বলে মনে হচ্ছে।
মধু

উত্তর:


26

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

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

ইঙ্গিত, আপনি এটি সম্পূর্ণরূপে ইন্টারফেস বিল্ডার ব্যবহার করে করতে পারেন। অন্য কথায়, এটির জন্য কোড লেখার দরকার নেই।


373

যখন isLayoutMarginsRelativeArrangementসম্পত্তি সত্য, স্ট্যাক দৃশ্য তার ব্যবস্থা মতামত তার বিন্যাস মার্জিনে আপেক্ষিক লেআউট হবে।

stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
stackView.isLayoutMarginsRelativeArrangement = true

তবে এটি স্ট্যাক ভিউয়ের অভ্যন্তরে সমস্ত সাজানো দর্শনগুলিকে প্রভাবিত করে। আপনি যদি কেবল একটি সাজানো দৃষ্টিতে এই প্যাডিংটি চান তবে আপনার নেস্টেড ব্যবহার করা দরকারUIStackView


2
isLayoutMarginsRelativeArrangementএকটি গেটর, সেটার হয় layoutMarginsRelativeArrangement। আমি উত্তরটি সম্পাদন করতে পারি না
ম্যারস

5
@ সামগ্রিকভাবে সুইফটে গেটর এবং সেটার ফাংশনের মধ্যে কোনও পার্থক্য নেই। তবে আপনি ঠিক বলেছেন, অবজেক্টিভ-সি দিয়ে বিকাশ করা লোকদের layoutMarginsRelativeArrangementপরিবর্তে ব্যবহার করা উচিত । অফিসিয়াল ডকুমেন্টেশন: developer.apple.com/references/uikit/uistackview/…
টোলগা ওকুর

3
উদ্দেশ্য-সি এর জন্য:stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
স্নুটো

4
ফেব্রুয়ারী 2019, অফিসে বসে মধ্যরাতে - এইগুলির মত উত্তরগুলি আমাকে এগিয়ে যাওয়ার শক্তি দেয়। ধন্যবাদ @ টলপ্প
নেফেরিয়ান ব্ল্যাক

155

আমি খুঁজে পেয়েছি যে স্ট্যাক ভিউয়ের মধ্যে সীমাবদ্ধতাগুলি কাজ করে না বা এগুলি কিছুটা অদ্ভুত বলে মনে হচ্ছে।

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

স্ট্যাকভিউ ভিতরে স্ট্যাকভিউ

স্ট্যাকভিউয়ের অভ্যন্তরে সমস্ত দর্শনের জন্য বিন্যাসের মার্জিন সেট করতে, নির্বাচন করুন:

Stack View > Size Inspector > Layout Margins > Fixed

দ্রষ্টব্য: স্ক্রিনশটগুলিতে দেখা যায়, "Fixed"বিকল্পটি আগে বলা হয়েছিল "Explicit"

তারপরে আপনার প্যাডিং যুক্ত করুন:

স্টোরিবোর্ড


23
অ্যাপল একটি জিনিস লুকায়। আমি ঘৃণা করি কীভাবে ভাল, বন্ধুত্বপূর্ণ এবং সহজ বিপরীতে Xcode। ধন্যবাদ
হাঁস

আমি যখন স্পষ্টভাবে এই লেআউট মার্জিনগুলি পরিবর্তন করি তখন এক্সকোড ক্র্যাশ করে চলে। একটি বাগ ফাইল করেছেন তবে তারা উত্তর দিয়েছে এটি একটি সদৃশ।
mvandillen

এটিই আমি ইউআইতে পাইনি। স্ট্যাক ভিউ মার্জিনের ক্ষেত্রগুলি দেখার জন্য লেআউট মার্জিনকে সুস্পষ্টে পরিবর্তন করুন।
পেকম্ব

13
এফওয়াইআই এক্সকোড 9 এখন "স্পষ্টি" এর পরিবর্তে এই "স্থির" বলে calls
মেল

এক্সকোড 9-এ, ফাইল পরিদর্শকের "সেফ এরিয়া লেআউট গাইডগুলি" টিপুন যাচাই করে আইবিতে এখনও অনেক সমস্যা দেখা দেয় এবং আপনার সীমাবদ্ধতার জন্য সাধারণ লেআউট গাইড সহ আটকে দিন।
পিজে_ফিনেগান

16

আমার জন্য কী কাজ করেছে তা হল অন্য একটি ইউআইভিউ ভিউ যা কেবলমাত্র একটি স্পেসার দেখার জন্য যুক্ত করা (কমপক্ষে স্ট্যাকভিউ.ডিসিস্ট্রিবিউশন =। পূরণ করুন) এর সাথে কাজ করে:

let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
stackView.addArrangedSubview(spacerView)
stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt)
stackView.addArrangedSubview(NextView)...

6

সুইফ্ট 3: আপনার কেবলমাত্র অফসেটটি সেট করা দরকার:

firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true

আপনার পরে এই সীমাবদ্ধতা সেট করা নিশ্চিত হন parentView.addArrangdSubView(firstView)


4

আপনার যদি কেবল শীর্ষস্থানীয় প্যাডিংয়ের প্রয়োজন হয় তবে আপনি স্ট্যাক ভিউয়ের প্রান্তিককরণটিকে "ট্রেলিং" এ সেট করতে পারেন এবং তারপরে আপনি এর প্রতিটি অন্তর্দর্শনগুলির জন্য অনন্য নেতৃত্বের সীমাবদ্ধতা নির্দিষ্ট করতে পারবেন to

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


1

এই প্রশ্নের ইতিমধ্যে ভাল উত্তর রয়েছে, যদিও একটি পরামর্শ, spacingমতামতের মধ্যে ব্যবধান নির্ধারণের জন্য সম্পত্তি ব্যবহার করুন । প্রথম এবং শেষ দর্শনের জন্য দুটি বিকল্প থাকতে পারে, হয় @ টল্প্প প্রস্তাবিত হিসাবে ইনসেটগুলি সেট করুন বা প্যাডিং যুক্ত করার জন্য ধ্রুবক সহ প্যারেন্ট (স্ট্যাকভিউ) এর সাথে সংযুক্তি বাধা যুক্ত করুন।


0

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


0

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

এটি ইন্টারফেস বিল্ডারে এবং প্রোগ্রামের মাধ্যমে করা যায়।


-3

দেখে মনে হচ্ছে সমাধানটি বেশ সহজ ছিল। পরিবর্তে:

stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true

আমি শুধু লিখেছি:

stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor, constant: 15).active = true

1
প্রকৃতপক্ষে আপনার কোডটি urscrolview এর ভিতরে uistackview জন্য একটি শীর্ষস্থানীয় যুক্ত করে, এটি আপনার uistackview এর ভিতরে আপনার দর্শনগুলির জন্য কোনও প্যাডিং যোগ করে না, (যেমন প্রশ্নটি বর্ণিত হয়েছে)
উইলিয়াম কিনান

হ্যাঁ, তবে আপনি প্যাডিং যুক্ত করতে পারেন কিনা তা আমি জানি না, সুতরাং এটি আমার পক্ষে কাজ করবে।
অ্যাড্রিয়ান

প্রথম চিন্তা হিসাবে, আপনি অন্য ইউস্ট্যাকভিউটি আপনার মূল ইউস্ট্যাকভিউটি অন্তর্নিহিত করতে পারেন এবং এটিকে প্যাডিং দিতে পারেন। তারপরে এই নতুন ইউস্ট্যাক ভিউতে আপনার মতামত যুক্ত করুন (আপনি এটি সম্পূর্ণরূপে ইন্টারফেস নির্মাতার দ্বারা করতে পারেন, এর জন্য কোড লেখার দরকার নেই)
উইলিয়াম কিনান

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