第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

以編程方式在UIStackView中添加視圖

以編程方式在UIStackView中添加視圖

蠱毒傳說(shuō) 2019-11-23 11:22:39
我正在嘗試以編程方式在UIStackView中添加視圖?,F(xiàn)在我的代碼是: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];當(dāng)我部署應(yīng)用程序時(shí),只有一個(gè)視圖并且它是黑色的。(view1也獲得了view2的參數(shù))
查看完整描述

3 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

堆棧視圖使用內(nèi)部?jī)?nèi)容大小,因此使用布局約束來(lái)定義視圖的尺寸。


有一種簡(jiǎn)單的方法可以快速添加約束(示例):


[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上進(jìn)行了測(cè)試

http://img1.sycdn.imooc.com//5dd8a61a0001d45e04870801.jpg

查看完整回答
反對(duì) 回復(fù) 2019-11-23
?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

UIStackView在內(nèi)部使用約束來(lái)定位其排列的子視圖。究竟創(chuàng)建什么約束取決于堆棧視圖本身的配置方式。默認(rèn)情況下,堆棧視圖將創(chuàng)建約束,將其布置在水平線上的子視圖約束,將前導(dǎo)視圖和尾隨視圖固定到其自己的前邊緣和后邊緣。因此,您的代碼將產(chǎn)生如下所示的布局:


|[view1][view2]|

分配給每個(gè)子視圖的空間由許多因素決定,包括子視圖的固有內(nèi)容大小,其抗壓縮性和內(nèi)容擁抱優(yōu)先級(jí)。默認(rèn)情況下,UIView實(shí)例不定義內(nèi)部?jī)?nèi)容大小。這通常是由子類(lèi)提供的,例如UILabel或UIButton。


由于兩個(gè)新UIView實(shí)例的內(nèi)容壓縮阻力和內(nèi)容包含優(yōu)先級(jí)相同,并且兩個(gè)視圖都不提供固有的內(nèi)容大小,因此布局引擎必須就應(yīng)該為每個(gè)視圖分配什么大小做出最佳猜測(cè)。在您的情況下,它將為第一個(gè)視圖分配100%的可用空間,而沒(méi)有為第二個(gè)視圖分配任何空間。


如果修改代碼以使用UILabel實(shí)例代替,則將獲得更好的結(jié)果:


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];

請(qǐng)注意,您不必自己明確創(chuàng)建任何約束。這是使用的主要好處UIStackView-它向開(kāi)發(fā)人員隱藏了約束管理的(通常是丑陋的)細(xì)節(jié)。


查看完整回答
反對(duì) 回復(fù) 2019-11-23
  • 3 回答
  • 0 關(guān)注
  • 934 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)