আমি যখন লুকিয়ে থাকি তখন আমি অটো লেআউট ত্রুটিগুলি নিয়ে কুস্তি করেছিলাম UIStackView। একত্রে বই রাখার এবং স্ট্যাকগুলি মোড়কে রাখার পরিবর্তে UIViews, আমি parentStackViewযে বাচ্চাদের আড়াল / লুকিয়ে রাখতে চাই তার জন্য আমার এবং আউটলেটগুলির জন্য একটি আউটলেট তৈরি করতে পছন্দ করেছি।
@IBOutlet weak var parentStackView: UIStackView!
@IBOutlet var stackViewNumber1: UIStackView!
@IBOutlet var stackViewNumber2: UIStackView!
স্টোরিবোর্ডে, আমার পিতামাতার স্ট্যাকটি দেখতে এখানে:

এটিতে 4 টি বাচ্চা রয়েছে এবং প্রতিটি বাচ্চারই তাদের ভিতরে স্ট্যাক ভিউ রয়েছে views আপনি যখন কোনও স্ট্যাক ভিউটি আড়াল করেন, যদি এটি ইউআই উপাদানগুলিও পাওয়া যায় যা স্ট্যাক দর্শনগুলিও থাকে তবে আপনি স্বয়ংক্রিয় বিন্যাস ত্রুটির একটি স্ট্রিম দেখতে পাবেন। লুকানোর পরিবর্তে আমি সেগুলি সরিয়ে নেওয়ার পছন্দ করেছিলাম।
আমার উদাহরণে, parentStackViews4 টি উপাদানের একটি অ্যারে রয়েছে: শীর্ষ স্ট্যাক ভিউ, স্ট্যাকভিউ নাম্বার 1, স্ট্যাক ভিউ নম্বর 2 এবং স্টপ বোতাম। তাদের সূচকগুলি arrangedSubviewsযথাক্রমে 0, 1, 2 এবং 3। আমি যখন কোনওটি আড়াল করতে চাই তখন আমি এটিকে parentStackView's arrangedSubviewsঅ্যারে থেকে সরিয়ে ফেলি । যেহেতু এটি দুর্বল নয়, এটি স্মৃতিতে স্থির থাকে এবং আপনি এটি পরে আপনার পছন্দসই সূচীতে রেখে দিতে পারেন। আমি এটি পুনরায় পুনর্নির্মাণ করছি না, সুতরাং এটি প্রয়োজন না হওয়া পর্যন্ত কেবল স্থির থাকে তবে স্মৃতি ফেটে না।
সুতরাং মূলত, আপনি ...
1) আপনার পিতামাতার স্ট্যাক এবং আপনি যে স্টোরবোর্ডে লুকিয়ে রাখতে / লুকিয়ে রাখতে চান বাচ্চাদের জন্য আইবিআউটলেটগুলি টেনে আনুন।
2) আপনি যখন এগুলি আড়াল করতে চান তখন parentStackView's arrangedSubviewsঅ্যারে থেকে আপনি যে স্ট্যাকটি আড়াল করতে চান তা সরিয়ে ফেলুন ।
3) কল self.view.layoutIfNeeded()সঙ্গে UIView.animateWithDuration।
সর্বশেষ দুটি স্ট্যাকভিউ নোট করুন weak। আপনি যখন এগুলি না দেখান তখন আপনার এগুলি চারপাশে রাখা দরকার।
ধরা যাক আমি স্ট্যাকভিউ নাম্বার 2 আড়াল করতে চাই:
parentStackView.removeArrangedSubview(stackViewNumber2)
stackViewNumber2.removeFromSuperview()
তারপরে এনিমেট করুন:
UIView.animate(withDuration: 0.25,
delay: 0,
usingSpringWithDamping: 2.0,
initialSpringVelocity: 10.0,
options: [.curveEaseOut],
animations: {
self.view.layoutIfNeeded()
},
completion: nil)
আপনি যদি stackViewNumber2পরে "লুকোচুরি" করতে চান , আপনি কেবল এটি পছন্দসই parentStackView arrangedSubViewsসূচীতে sertোকাতে এবং আপডেটটি সঞ্চার করতে পারেন।
parentStackView.removeArrangedSubview(stackViewNumber1)
stackViewNumber1.removeFromSuperview()
parentStackView.insertArrangedSubview(stackViewNumber2, at: 1)
UIView.animate(withDuration: 0.25,
delay: 0,
usingSpringWithDamping: 2.0,
initialSpringVelocity: 10.0,
options: [.curveEaseOut],
animations: {
self.view.layoutIfNeeded()
},
completion: nil)
আমি খুঁজে পেয়েছি যে সীমাবদ্ধতাগুলিতে বুককিপিং করা, অগ্রাধিকারের সাথে ঝাঁকুনি দেওয়া ইত্যাদির চেয়ে অনেক সহজ কাজ to
আপনার যদি ডিফল্টরূপে গোপনীয় কিছু থাকে তবে আপনি এটি স্টোরিবোর্ডে রেখে দিতে পারেন viewDidLoadএবং এনিমেশনটি ব্যবহার না করেই সরিয়ে ফেলতে এবং আপডেট করতে পারেন view.layoutIfNeeded()।