প্রোগ্রাম হিসাবে ইউআইএসট্যাকভিউতে দর্শন যুক্ত করুন


158

আমি ইউআইএসট্যাকভিউ প্রোগ্রামিয়মে ভিউ যুক্ত করার চেষ্টা করছি। আপাতত আমার কোডটি হ'ল:

UIView *view1 = [[UIView alloc]init];
view1.backgroundColor = [UIColor blackColor];
[view1 setFrame:CGRectMake(0, 0, 100, 100)];

UIView *view2 =  [[UIView alloc]init];
view2.backgroundColor = [UIColor greenColor];
[view2 setFrame:CGRectMake(0, 100, 100, 100)];

[self.stack1 addArrangedSubview:view1];
[self.stack1 addArrangedSubview:view2];

আমি যখন অ্যাপটি স্থাপন করি তখন কেবল 1 টি দর্শন থাকে এবং এটি কালো রঙের সাথে থাকে view


তুমি কি তোমার আউটলেট পরীক্ষা করেছ? আপনি রানটাইম এ সংক্ষিপ্তসার লগ করেছেন?
ঋক্ষমণ্ডল

10
ব্যবহার করুন addArrangedSubview:, নাaddSubview:
pkamb

উত্তর:


245

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

দ্রুত বাধা যুক্ত করার একটি সহজ উপায় রয়েছে (উদাহরণস্বরূপ):

[view1.heightAnchor constraintEqualToConstant:100].active = true;

সম্পূর্ণ কোড:

- (void) setup {

    //View 1
    UIView *view1 = [[UIView alloc] init];
    view1.backgroundColor = [UIColor blueColor];
    [view1.heightAnchor constraintEqualToConstant:100].active = true;
    [view1.widthAnchor constraintEqualToConstant:120].active = true;


    //View 2
    UIView *view2 = [[UIView alloc] init];
    view2.backgroundColor = [UIColor greenColor];
    [view2.heightAnchor constraintEqualToConstant:100].active = true;
    [view2.widthAnchor constraintEqualToConstant:70].active = true;

    //View 3
    UIView *view3 = [[UIView alloc] init];
    view3.backgroundColor = [UIColor magentaColor];
    [view3.heightAnchor constraintEqualToConstant:100].active = true;
    [view3.widthAnchor constraintEqualToConstant:180].active = true;

    //Stack View
    UIStackView *stackView = [[UIStackView alloc] init];

    stackView.axis = UILayoutConstraintAxisVertical;
    stackView.distribution = UIStackViewDistributionEqualSpacing;
    stackView.alignment = UIStackViewAlignmentCenter;
    stackView.spacing = 30;


    [stackView addArrangedSubview:view1];
    [stackView addArrangedSubview:view2];
    [stackView addArrangedSubview:view3];

    stackView.translatesAutoresizingMaskIntoConstraints = false;
    [self.view addSubview:stackView];


    //Layout for Stack View
    [stackView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = true;
    [stackView.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor].active = true;
}

দ্রষ্টব্য: এটি iOS 9 এ পরীক্ষা করা হয়েছিল

ইউআইএসট্যাকভিউ সমান ব্যবধান (কেন্দ্রিক)


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

যখন আমি এটি করি "[ভিউ 1.ইহাইটএঞ্চার কনস্ট্রেন্ট ইক্যুয়াল টোকোস্ট্যান্ট: 100] .এ্যাকটিভ = সত্য;" আইওএস-এ আমি ত্রুটি পেয়েছি ৮. এটি কেবল আইওএস 9.-এ কাজ করছে আমি জানি যে uistackview আইওএস 9+ এর জন্য তবে আমি কীভাবে উচ্চতা সেট করতে পারি আইওএস 8
নুরদিন সেলিমকো

আমার স্ট্যাকভিউ স্টোরিবোর্ড ব্যবহার করে যুক্ত করা হয়েছে। রানটাইমের সময় আমি স্ট্যাকভিউতে বেশ কয়েকটি ইউআইভিউ (অন্যান্য সাবভিউ ধারণ করে) যুক্ত করছি। ডেটা লোড করার পরে স্ট্যাকভিউয়ের সমস্ত দৃষ্টিভঙ্গির উচ্চতা একই রকম হয়, সামগ্রী হিসাবে সেগুলি পুনরায় আকার দিচ্ছে না। @ ব্যবহারকারী 1046037
মনসুউ ....

Individual স্বতন্ত্র দর্শনগুলির জন্য আপনার কি বাধা রয়েছে যা সামগ্রীর উপর নির্ভর করে তাদের আকার পরিবর্তিত হতে পারে?
ব্যবহারকারী 1046037

সমান প্রস্থ বা উচ্চতা সহ দর্শন পরিচালনা করার জন্য এটি সর্বোত্তম এবং সর্বোত্তম উপায়
কাম্পাই

156

সুইফ্ট 5.0

//Image View
let imageView = UIImageView()
imageView.backgroundColor = UIColor.blue
imageView.heightAnchor.constraint(equalToConstant: 120.0).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 120.0).isActive = true
imageView.image = UIImage(named: "buttonFollowCheckGreen")

//Text Label
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.yellow
textLabel.widthAnchor.constraint(equalToConstant: self.view.frame.width).isActive = true
textLabel.heightAnchor.constraint(equalToConstant: 20.0).isActive = true
textLabel.text  = "Hi World"
textLabel.textAlignment = .center

//Stack View
let stackView   = UIStackView()
stackView.axis  = NSLayoutConstraint.Axis.vertical
stackView.distribution  = UIStackView.Distribution.equalSpacing
stackView.alignment = UIStackView.Alignment.center
stackView.spacing   = 16.0

stackView.addArrangedSubview(imageView)
stackView.addArrangedSubview(textLabel)
stackView.translatesAutoresizingMaskIntoConstraints = false

self.view.addSubview(stackView)

//Constraints
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true

@ User1046037 উত্তরের ভিত্তিতে।


2
শুরু হচ্ছে iOS 8 এ , এটি ব্যবহার ব্যাচে সীমাবদ্ধতার সক্রিয় করতে সম্ভব activate(_:), এবং এটা এই ভাবে করতে সাধারণত আরো দক্ষ এর developer.apple.com/documentation/uikit/nslayoutconstraint/...
জনাথন Cabrera


17

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

|[view1][view2]|

প্রতিটি সাবভিউতে বরাদ্দ করা স্থানটি সংক্ষিপ্তসার অভ্যন্তরীণ সামগ্রীর আকার এবং এটির সংকোচন প্রতিরোধের এবং সামগ্রীকে জড়িয়ে থাকা অগ্রাধিকার সহ বিভিন্ন কারণ দ্বারা নির্ধারিত হয়। ডিফল্টরূপে, UIViewদৃষ্টান্তগুলি অভ্যন্তরীণ সামগ্রীর আকারকে সংজ্ঞায়িত করে না। এটি এমন একটি বিষয় যা সাধারণত একটি সাবক্লাস দ্বারা সরবরাহ করা হয়, যেমন UILabelবা UIButton

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

UILabelপরিবর্তে উদাহরণগুলি ব্যবহার করার জন্য আপনি যদি আপনার কোডটি পরিবর্তন করেন তবে আপনি আরও ভাল ফলাফল পাবেন:

UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];

UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];

[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];

মনে রাখবেন যে নিজেকে কোনও প্রতিবন্ধকতা স্পষ্টভাবে তৈরি করা প্রয়োজন নয়। এটি ব্যবহারের মূল সুবিধা UIStackView- এটি বিকাশকারী থেকে সীমাবদ্ধতা পরিচালনার (প্রায়শই কুৎসিত) বিবরণ গোপন করে।


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

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

বোধ হয়, তাই আমি এটি চেষ্টা করছি। এখন আমি একটি টেক্সটফিল্ড সহ একটি এক্সবিতে একটি ভিউ তৈরি করেছি, যা আমি 30 পিক্সেলের সুস্পষ্ট উচ্চতার সীমাবদ্ধতা দিই। আমি আরও নিম্নলিখিত দুটি সীমাবদ্ধতা তৈরি করেছি: MyTextField.top = top+20এবং bottom = MyTextField.bottom+20। আমি আশা করব যে এটি আমার দৃষ্টিভঙ্গিকে 70 এর অভ্যন্তরীণ উচ্চতা দেবে, তবে পরিবর্তে এটি বিরোধী বাধার বিষয়ে অভিযোগ করে। আপনি কি জানেন এখানে কি চলছে? এই দৃশ্যটিটিই আমি আমার ইউআইএসট্যাকভিউয়ের ভিতরে রাখতে চাই।
ফিজিক্যাল্যাটরেশন

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

আমি ধরে নিচ্ছি আপনি উপায় দ্বারা উল্লম্ব স্ট্যাক ভিউটি ব্যবহার করছেন। আপনি এই নিবন্ধটি স্ট্যাক ভিউগুলি সম্পর্কে লিখেছেন তাও দেখতে চাইতে পারেন: dzone.com/articles/…
গ্রেগ ব্রাউন

13

সুইফটে 4.2

let redView = UIView()
    redView.backgroundColor = .red

    let blueView = UIView()
    blueView.backgroundColor = .blue

    let stackView = UIStackView(arrangedSubviews: [redView, blueView])
    stackView.axis = .vertical
    stackView.distribution = .fillEqually

    view.addSubview(stackView)

    //        stackView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)

    // autolayout constraint
    stackView.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([stackView.topAnchor.constraint(equalTo: view.topAnchor), stackView.leftAnchor.constraint(equalTo: view.leftAnchor), stackView.rightAnchor.constraint(equalTo: view.rightAnchor), stackView.heightAnchor.constraint(equalToConstant: 200)])

8

আপনাকে বিতরণের ধরণ সেট করতে হবে। আপনার কোডে, যুক্ত করুন:

self.stack1.distribution = UIStackViewDistributionFillEqually;

অথবা আপনি সরাসরি আপনার ইন্টারফেস বিল্ডারে বিতরণ সেট করতে পারেন। উদাহরণ স্বরূপ:

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

আশা করি যে সাহায্য করে;) ল্যাপিনো।


8

দুটি লাইন অনুসরণ আমার সমস্যা স্থির

    view.heightAnchor.constraintEqualToConstant(50).active = true;
    view.widthAnchor.constraintEqualToConstant(350).active = true;

সুইফ্ট সংস্করণ -

    var DynamicView=UIView(frame: CGRectMake(100, 200, 100, 100))
    DynamicView.backgroundColor=UIColor.greenColor()
    DynamicView.layer.cornerRadius=25
    DynamicView.layer.borderWidth=2
    self.view.addSubview(DynamicView)
    DynamicView.heightAnchor.constraintEqualToConstant(50).active = true;
    DynamicView.widthAnchor.constraintEqualToConstant(350).active = true;

    var DynamicView2=UIView(frame: CGRectMake(100, 310, 100, 100))
    DynamicView2.backgroundColor=UIColor.greenColor()
    DynamicView2.layer.cornerRadius=25
    DynamicView2.layer.borderWidth=2
    self.view.addSubview(DynamicView2)
    DynamicView2.heightAnchor.constraintEqualToConstant(50).active = true;
    DynamicView2.widthAnchor.constraintEqualToConstant(350).active = true;

    var DynamicView3:UIView=UIView(frame: CGRectMake(10, 420, 355, 100))
    DynamicView3.backgroundColor=UIColor.greenColor()
    DynamicView3.layer.cornerRadius=25
    DynamicView3.layer.borderWidth=2
    self.view.addSubview(DynamicView3)

    let yourLabel:UILabel = UILabel(frame: CGRectMake(110, 10, 200, 20))
    yourLabel.textColor = UIColor.whiteColor()
    //yourLabel.backgroundColor = UIColor.blackColor()
    yourLabel.text = "mylabel text"
    DynamicView3.addSubview(yourLabel)
    DynamicView3.heightAnchor.constraintEqualToConstant(50).active = true;
    DynamicView3.widthAnchor.constraintEqualToConstant(350).active = true;

    let stackView   = UIStackView()
    stackView.axis  = UILayoutConstraintAxis.Vertical
    stackView.distribution  = UIStackViewDistribution.EqualSpacing
    stackView.alignment = UIStackViewAlignment.Center
    stackView.spacing   = 30

    stackView.addArrangedSubview(DynamicView)
    stackView.addArrangedSubview(DynamicView2)
    stackView.addArrangedSubview(DynamicView3)

    stackView.translatesAutoresizingMaskIntoConstraints = false;

    self.view.addSubview(stackView)

    //Constraints
    stackView.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor).active = true
    stackView.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor).active = true

8

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

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x618000086e50 UIView:0x7fc11c4051c0.height == 120   (active)>",
    "<NSLayoutConstraint:0x610000084fb0 'UISV-hiding' UIView:0x7fc11c4051c0.height == 0   (active)>"
)

কারণ যখন আড়াল viewমধ্যেstackView এটা অ্যানিমেট করতে 0 উচ্চতা সেট হবে।

সমাধানpriority নীচে হিসাবে সীমাবদ্ধতা পরিবর্তন ।

import UIKit

class ViewController: UIViewController {

    let stackView = UIStackView()
    let a = UIView()
    let b = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        a.backgroundColor = UIColor.red
        a.widthAnchor.constraint(equalToConstant: 200).isActive = true
        let aHeight = a.heightAnchor.constraint(equalToConstant: 120)
        aHeight.isActive = true
        aHeight.priority = 999

        let bHeight = b.heightAnchor.constraint(equalToConstant: 120)
        bHeight.isActive = true
        bHeight.priority = 999
        b.backgroundColor = UIColor.green
        b.widthAnchor.constraint(equalToConstant: 200).isActive = true

        view.addSubview(stackView)
        stackView.backgroundColor = UIColor.blue
        stackView.addArrangedSubview(a)
        stackView.addArrangedSubview(b)
        stackView.axis = .vertical
        stackView.distribution = .equalSpacing
        stackView.translatesAutoresizingMaskIntoConstraints = false
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // Just add a button in xib file or storyboard and add connect this action.
    @IBAction func test(_ sender: Any) {
        a.isHidden = !a.isHidden
    }

}

5
    //Image View
    let imageView               = UIImageView()
    imageView.backgroundColor   = UIColor.blueColor()
    imageView.heightAnchor.constraintEqualToConstant(120.0).active = true
    imageView.widthAnchor.constraintEqualToConstant(120.0).active = true
    imageView.image = UIImage(named: "buttonFollowCheckGreen")

    //Text Label
    let textLabel               = UILabel()
    textLabel.backgroundColor   = UIColor.greenColor()
    textLabel.widthAnchor.constraintEqualToConstant(self.view.frame.width).active = true
    textLabel.heightAnchor.constraintEqualToConstant(20.0).active = true
    textLabel.text  = "Hi World"
    textLabel.textAlignment = .Center


    //Third View
    let thirdView               = UIImageView()
    thirdView.backgroundColor   = UIColor.magentaColor()
    thirdView.heightAnchor.constraintEqualToConstant(120.0).active = true
    thirdView.widthAnchor.constraintEqualToConstant(120.0).active = true
    thirdView.image = UIImage(named: "buttonFollowMagenta")


    //Stack View
    let stackView   = UIStackView()
    stackView.axis  = UILayoutConstraintAxis.Vertical
    stackView.distribution  = UIStackViewDistribution.EqualSpacing
    stackView.alignment = UIStackViewAlignment.Center
    stackView.spacing   = 16.0

    stackView.addArrangedSubview(imageView)
    stackView.addArrangedSubview(textLabel)
    stackView.addArrangedSubview(thirdView)
    stackView.translatesAutoresizingMaskIntoConstraints = false;

    self.view.addSubview(stackView)

    //Constraints
    stackView.centerXAnchor.constraintEqualToAnchor(self.view.centerXAnchor).active = true
    stackView.centerYAnchor.constraintEqualToAnchor(self.view.centerYAnchor).active = true

@ ওলেগ পপোভের উত্তরে উন্নত


4

আমার ক্ষেত্রে যে বিষয়টি নিয়ে আমি অশান্তি বোধ করছিলাম তা হ'ল আমি এই লাইনটি অনুপস্থিত:

stackView.translatesAutoresizingMaskIntoConstraints = false;

এর পরে আমার সাজানো সাবউভিউগুলিতে যা কিছু হোক না কেন বাধা সেট করার দরকার নেই, স্ট্যাকভিউ এটির যত্ন নিচ্ছে।


4

ওলেগ পপভের উত্তরের সুইফ্ট 5 সংস্করণ , যা ব্যবহারকারী 1046037 এর উত্তরের উপর ভিত্তি করে

//Image View
let imageView = UIImageView()
imageView.backgroundColor = UIColor.blue
imageView.heightAnchor.constraint(equalToConstant: 120.0).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 120.0).isActive = true
imageView.image = UIImage(named: "buttonFollowCheckGreen")

//Text Label
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.yellow
textLabel.widthAnchor.constraint(equalToConstant: self.view.frame.width).isActive = true
textLabel.heightAnchor.constraint(equalToConstant: 20.0).isActive = true
textLabel.text  = "Hi World"
textLabel.textAlignment = .center

//Stack View
let stackView   = UIStackView()
stackView.axis  = NSLayoutConstraint.Axis.vertical
stackView.distribution  = UIStackView.Distribution.equalSpacing
stackView.alignment = UIStackView.Alignment.center
stackView.spacing   = 16.0

stackView.addArrangedSubview(imageView)
stackView.addArrangedSubview(textLabel)
stackView.translatesAutoresizingMaskIntoConstraints = false

self.view.addSubview(stackView)

//Constraints
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true

1

আমি ঠিক খুব একই সমস্যা জুড়ে এসেছি। স্ট্যাক ভিউয়ের মাত্রাগুলি ঠিক আগে উল্লিখিত যেমন সাজানো সাবউভিউগুলির একটি অভ্যন্তরীণ সামগ্রীর আকার নির্ভর করে। এখানে সুইফট ২.x এবং নিম্নলিখিত ভিউ স্ট্রাকচারে আমার সমাধানটি দেওয়া হল:

দেখুন - ইউআইভিউ

কাস্টমভিউ - কাস্টমভিউ: ইউআইভিউ

স্ট্যাকভিউ - ইউআইএসট্যাক ভিউ

সজ্জিত সাবভিউ - কাস্টম ইউআইভিউ সাবক্লাসগুলি

    //: [Previous](@previous)

import Foundation
import UIKit
import XCPlayground

/**Container for stack view*/
class CustomView:UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }


    init(){
        super.init(frame: CGRectZero)

    }

}

/**Custom Subclass*/
class CustomDrawing:UIView{
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()

    }

    func setup(){
       // self.backgroundColor = UIColor.clearColor()
        print("setup \(frame)")
    }

    override func drawRect(rect: CGRect) {
        let ctx = UIGraphicsGetCurrentContext()
        CGContextMoveToPoint(ctx, 0, 0)
        CGContextAddLineToPoint(ctx, CGRectGetWidth(bounds), CGRectGetHeight(bounds))
        CGContextStrokePath(ctx)

        print("DrawRect")

    }
}



//: [Next](@next)
let stackView = UIStackView()
stackView.distribution = .FillProportionally
stackView.alignment = .Center
stackView.axis = .Horizontal
stackView.spacing = 10


//container view
let view = UIView(frame: CGRectMake(0,0,320,640))
view.backgroundColor = UIColor.darkGrayColor()
//now custom view

let customView = CustomView()

view.addSubview(customView)

customView.translatesAutoresizingMaskIntoConstraints = false
customView.widthAnchor.constraintEqualToConstant(220).active = true
customView.heightAnchor.constraintEqualToConstant(60).active = true
customView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor).active = true
customView.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor).active = true
customView.backgroundColor = UIColor.lightGrayColor()

//add a stack view
customView.addSubview(stackView)
stackView.centerXAnchor.constraintEqualToAnchor(customView.centerXAnchor).active = true
stackView.centerYAnchor.constraintEqualToAnchor(customView.centerYAnchor).active = true
stackView.translatesAutoresizingMaskIntoConstraints = false


let c1 = CustomDrawing()
c1.translatesAutoresizingMaskIntoConstraints = false
c1.backgroundColor = UIColor.redColor()
c1.widthAnchor.constraintEqualToConstant(30).active = true
c1.heightAnchor.constraintEqualToConstant(30).active = true

let c2 = CustomDrawing()
c2.translatesAutoresizingMaskIntoConstraints = false
c2.backgroundColor = UIColor.blueColor()
c2.widthAnchor.constraintEqualToConstant(30).active = true
c2.heightAnchor.constraintEqualToConstant(30).active = true


stackView.addArrangedSubview(c1)
stackView.addArrangedSubview(c2)


XCPlaygroundPage.currentPage.liveView = view

-2

কোড নীচে চেষ্টা করুন,

UIView *view1 = [[UIView alloc]init];
view1.backgroundColor = [UIColor blackColor];
[view1 setFrame:CGRectMake(0, 0, 50, 50)];

UIView *view2 =  [[UIView alloc]init];
view2.backgroundColor = [UIColor greenColor];
[view2 setFrame:CGRectMake(0, 100, 100, 100)];

NSArray *subView = [NSArray arrayWithObjects:view1,view2, nil];

[self.stack1 initWithArrangedSubviews:subView];

আশা করি এটা কাজ করবে. আপনার আরও স্পষ্টতা প্রয়োজন হলে আমাকে জানান।

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