কীভাবে অটোলেআউট ব্যবহার করে মোট প্রস্থের শতাংশ তৈরি করবেন?


114

আমার মোট প্রস্থের একটি নির্দিষ্ট শতাংশ সহ তিনটি গতিশীল কলাম তৈরি করতে হবে। তৃতীয়াংশ নয়, বিভিন্ন মান। উদাহরণস্বরূপ, নিম্নলিখিত চিত্রটি তিনটি কলাম দেখায়: প্রথমটি 42% প্রশস্ত, দ্বিতীয়টি 25% প্রশস্ত এবং তৃতীয়টি 33% প্রশস্ত।

ভিউকন্ট্রোলার জুড়ে 600 পিক্সেলের জন্য এটি যথাক্রমে 252, 150 এবং 198 পিক্সেল হবে।

যাইহোক, পরবর্তী কোনও ডিসপ্লে মাপের জন্য (যেমন আইফোন 4 ল্যান্ডস্কেপ (960 প্রশস্ত) বা আইপ্যাড 2 প্রতিকৃতি (768 প্রশস্ত), আমি আপেক্ষিক শতাংশগুলি একই হতে হবে (উপরে পিক্সেলের প্রশস্ততা নয়)।

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

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

উত্তর:


205

যদি আপনি বলেন যে আপনি কোডে এটি কীভাবে করতে জানেন, তবে আপনি ইতিমধ্যে স্টোরিবোর্ডে এটি কীভাবে করবেন তা জানেন। এটি ঠিক একই সীমাবদ্ধতা, তবে আপনি কোডের পরিবর্তে দৃশ্যত এগুলি তৈরি করছেন।

  1. একটি দর্শন এবং তার তত্ত্বাবধান উভয়ই নির্বাচন করুন।

  2. সুপারিভিউয়ের প্রস্থের সমান প্রস্থকে সীমাবদ্ধ করতে সম্পাদক -> পিন -> প্রস্থগুলি সমানভাবে চয়ন করুন (ক্যানভাসের নীচে "পিন" পপআপ ডায়ালগটি এখানে সেরা কাজ করে)।

  3. সীমাবদ্ধতাটি সম্পাদনা করুন এবং গুণককে পছন্দসই ভগ্নাংশে সেট করুন, যেমন 0.42। এবং তাই অন্যান্য মতামতের জন্য।


9
নিশ্চিত হয়ে নিন যে আপনি যে দৃশ্যে আবদ্ধ করছেন তা সমান প্রস্থের সীমাবদ্ধতার "প্রথম আইটেম" এ প্রদর্শিত হবে এবং তত্ত্বাবধানের প্রস্থ নয়, অন্যথায় আপনি আপনার তদারকির প্রস্থের প্রশস্ততার প্রশস্ত গুণকে করছেন। সমতুল্য প্রস্থের সীমাবদ্ধতা প্রয়োগ করতে একটি পর্যবেক্ষণ থেকে তত্ত্বাবধানে নিয়ন্ত্রণ-টেনে আনলে এগুলি সর্বদা বিপরীত হয়, যা আমার কাছে বিপরীতমুখী বলে মনে হয়।
স্মারক

আহ - "কোডে এটি করার মাধ্যমে" আমি "ম্যানুয়ালি, কোনও বাধা বা অটলআউট ছাড়াই" এর মতো আরও কিছু বোঝাতে চাইছিলাম।
জেফরি বার্থিয়ামে

চমৎকার উত্তর. আমি অবাক হচ্ছি আইবি এই সীমাবদ্ধতাটি সম্পাদনা করার জন্য কোনও উপায় সরবরাহ করে না।
wcochran

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

6
এক্সকোডে নতুন: আপনি যদি সমানভাবে সারিবদ্ধ করতে চান তবে নতুন "স্ট্যাক ভিউ" ব্যবহার করুন।
বিজন

15

অ্যাপল ইউআইএসট্যাকভিউ পরিচয় করায় এটি কাজটি অনেক সহজ করে তুলেছে।

পদ্ধতি 1: নিব / স্টোরিবোর্ড ব্যবহার:

আপনাকে কেবল ইন্টারফেস বিল্ডারে তিনটি ভিউ যুক্ত করতে হবে এবং তাদের স্ট্যাকভিউতে এম্বেড করতে হবে

এক্সকোড ► সম্পাদক ► এম্বেড করুন ► স্ট্যাকভিউ

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

স্ট্যাকভিউ নির্বাচন করুন এবং নিরাপদআরিয়ার সাথে শীর্ষস্থানীয়, অনুসরণকারী, শীর্ষ এবং সমান উচ্চতার প্রতিবন্ধকতা দিন

অনুপাত পরিদর্শনকারী অঞ্চলটি ক্লিক করুন এবং আনুপাতিকভাবে পূরণ করতে স্ট্যাকভিউ অনুভূমিক এবং বিতরণ সেট করুন

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

শীর্ষস্থানীয়, পিছনে, উপরে, নীচের দিকের সাথে নীচে দিয়ে তিনটি দৃশ্যের সীমাবদ্ধতা দিন। এখানে চিত্র বর্ণনা লিখুন

পদ্ধতি 2: প্রোগ্রামিয়ালি:

import UIKit
class StackViewProgramatically: UIViewController {
    var propotionalStackView: UIStackView!
    ///Initially defining three views
    let redView: UIView = {
        let view = UIView()//taking 42 % initially
        view.frame = CGRect(x: 0, y: 0, width: 42 * UIScreen.main.bounds.width/100, height: UIScreen.main.bounds.height)
        view.backgroundColor = .red
        return view
    }()

    let greenView: UIView = {
        let view = UIView()//taking 42* initially
        view.frame = CGRect(x: 42 * UIScreen.main.bounds.width/100, y: 0, width: 25 * UIScreen.main.bounds.width/100, height: UIScreen.main.bounds.height)
        view.backgroundColor = .green
        return view
    }()
    let blueView: UIView = {
        let view = UIView()//taking 33*initially
        view.frame = CGRect(x: 67 * UIScreen.main.bounds.width/100, y: 0, width: 33 * UIScreen.main.bounds.width/100, height: UIScreen.main.bounds.height)
        view.backgroundColor = .blue
        return view
    }()

    ///Changing UIView frame to supports landscape mode.
    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        DispatchQueue.main.async {
            self.redView.frame = CGRect(x: 0, y: 0, width: 42 * self.widthPercent, height: self.screenHeight)
            self.greenView.frame = CGRect(x: 42 * self.widthPercent, y: 0, width: 25 * self.widthPercent, height: self.screenHeight)
            self.blueView.frame = CGRect(x: 67 * self.widthPercent, y: 0, width: 33 * self.widthPercent, height: self.screenHeight)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //Adding subViews to the stackView
        propotionalStackView = UIStackView()
        propotionalStackView.addSubview(redView)
        propotionalStackView.addSubview(greenView)
        propotionalStackView.addSubview(blueView)
        propotionalStackView.spacing = 0
        ///setting up stackView
        propotionalStackView.axis = .horizontal
        propotionalStackView.distribution = .fillProportionally
        propotionalStackView.alignment = .fill
        view.addSubview(propotionalStackView)
    }
}
//MARK: UIscreen helper extension
extension NSObject {

    var widthPercent: CGFloat {
        return UIScreen.main.bounds.width/100
    }

    var screenHeight: CGFloat {
        return UIScreen.main.bounds.height
    }
}

আউটপুট:

ল্যান্ডস্কেপ এবং প্রতিকৃতি নিয়ে কাজ করে

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

ডেমো প্রকল্প - https://github.com/janeshsutharios/UIStackView-with-strats

https://developer.apple.com/videos/play/wwdc2015/218/


4

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

বাম-সর্বাধিক দর্শন

  • অ্যাঙ্করড SuperView.Leading
  • এর স্থির শতাংশটি একটিতে গুণক হিসাবে সংজ্ঞায়িত করে SuperView.Height

মধ্যবর্তী মতামত

  • এর স্থির শতাংশটি একটিতে গুণক হিসাবে সংজ্ঞায়িত করে SuperView.Height
  • leftতার প্রতিবেশীর ডানদিকে পিনগুলি

ডান-সর্বাধিক দর্শন

  • একটি নির্দিষ্ট শতাংশ নির্ধারণ করে না (এটি উপলব্ধ দর্শনের অবশিষ্টাংশ)
  • leftতার প্রতিবেশীর ডানদিকে পিনগুলি
  • পিনের তার rightথেকেSuperView.Trailing

সমস্ত দর্শন

  • অ্যাঙ্কর করে Top Layout Guide.Topএবং তাদের অ-স্থির উচ্চতা সংজ্ঞায়িত করুন Top Layout Guide.bottom। উপরের উত্তরে উল্লেখ করা হয়েছে যে প্রতিবেশী দর্শনে সমান উচ্চতা নির্ধারণ করে এটিও করা যেতে পারে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.