欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ios開(kāi)發(fā)布局,iOS開(kāi)發(fā)吧

iOS可視化布局中的預(yù)覽功能

p 在iOS開(kāi)發(fā)中, 我們可以通過(guò)Storyboard或Xib進(jìn)行可視化界面的布局, 然后使用AutoLayout進(jìn)行屏幕適配, 此時(shí)我們?cè)谀M器上運(yùn)行是比較費(fèi)時(shí)的, 原因是要切換到不同大小的屏幕上觀看樣式, 而切換模擬器需要一定的時(shí)間, 如果Mac的性能較差, 那就非常痛苦了

南潯網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),南潯網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為南潯上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的南潯做網(wǎng)站的公司定做!

p不過(guò)Xcode上已經(jīng)給我們添加了一個(gè)不需要切換模擬器就能預(yù)覽各個(gè)屏幕上界面的功能

p以下就是可視化界面布局的預(yù)覽功能流程圖:

iOS 通俗易懂的熱門(mén)標(biāo)簽布局

效果圖

.h

```

@interfaceVMTagsView :UIView

/**

*根據(jù)傳入的要布局的總寬度和標(biāo)題數(shù)組返回總高度和封裝好的view的字典對(duì)應(yīng)key為height tagsview

*

*@param titleArray標(biāo)題數(shù)組

*@param allWidth需要布局的寬度

*

*@return

*/

+ (NSDictionary*)tagsViewForTitleArray:(NSArray*)titleArray andWidth:(CGFloat)allWidth;

/**

*根據(jù)傳入的布局的總寬度和標(biāo)題數(shù)組返回總高度和下面的init配合使用和上面效果一樣

*

*@param titleArray標(biāo)題數(shù)組

*@param allWidth需要布局的寬度

*

*@return總高度

*/

+ (CGFloat)tagsViewHeightForTitleArray:(NSArray*)titleArray andWidth:(CGFloat)allWidth;

- (instancetype)initWithFrame:(CGRect)frame titleArray:(NSArray*)titleArray;

/**

*view上button被點(diǎn)擊的block回調(diào) 參數(shù)為被點(diǎn)擊button的序號(hào)

*/

@property(nonatomic,copy)void(^buttonClickedBlock)(NSInteger);

@end

```

.m

```

#import"VMTagsView.h"

#define kButtonHeight28

#define KColorFromRGB(rgbValue) \

[UIColor colorWithRed:((float)((rgbValue 0xFF0000) 16))/255.0\

green:((float)((rgbValue 0xFF00) 8))/255.0\

blue:((float)(rgbValue 0xFF))/255.0alpha:1.0]

#define kMainTextGrayColorKColorFromRGB(0x5d5d5d)

#define Font(FONT)[UIFont systemFontOfSize:FONT]

#define kCommenFont14

@interfaceVMTagsView()

/**

*存放創(chuàng)建的button用于取下標(biāo)或者找對(duì)應(yīng)的button也可以用tag,但我覺(jué)得太low

*/

@property(nonatomic,strong)NSMutableArray*buttonArr;

@property(nonatomic)NSIntegerindex;

@end

@implementationVMTagsView

- (NSMutableArray*)buttonArr {

if(!_buttonArr) {

_buttonArr= [[NSMutableArrayalloc]init];

}

return_buttonArr;

}

- (instancetype)initWithFrame:(CGRect)frame titleArray:(NSArray*)titleArray {

self= [superinitWithFrame:frame];

if(self) {

[selfcreatSubviewsWithWidth:frame.size.widthtitleArray:titleArray];

}

returnself;

}

- (CGFloat)creatSubviewsWithWidth:(CGFloat)allWidth titleArray:(NSArray*)titleArray{

CGFloatx =0;

CGFloatnowWidth =0;

CGFloatnextWidth =0;

intnum_per_line =0;//每行btn的個(gè)數(shù)

intnum_of_line =0;//行數(shù)

for(inti =0; i titleArray.count; i ++) {

UIButton*button = [UIButtonbuttonWithType:UIButtonTypeCustom];

//添加到數(shù)組內(nèi)

[self.buttonArraddObject:button];

[buttonaddTarget:selfaction:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];

[buttonsetTitleColor:kMainTextGrayColorforState:UIControlStateNormal];

button.layer.borderColor=KColorFromRGB(0xE1E1E1).CGColor;

button.layer.borderWidth=1;

button.layer.cornerRadius=kButtonHeight/2;

button.layer.masksToBounds=YES;

button.titleLabel.font=Font(kCommenFont);

[buttonsetTitle:titleArray[i]forState:UIControlStateNormal];

[selfaddSubview:button];

CGFloattitleWidth = [VMTagsViewwidthForText:titleArray[i]andFontSize:kCommenFontheight:10];

titleWidth +=15;//給按鈕標(biāo)題距離左右邊框留點(diǎn)間距

nextWidth = nextWidth + titleWidth +10;//將要布局下一個(gè)按鈕的寬度

if(nextWidth allWidth) {

//如果大于限定的寬度置0另起一行

nextWidth =0;

nextWidth = nextWidth + titleWidth;

num_of_line ++;

nowWidth =0;

nowWidth = nowWidth + titleWidth;

num_per_line =0;

button.frame=CGRectMake(x,5+ (kButtonHeight+10) * num_of_line, titleWidth,kButtonHeight);

}else{

button.frame=CGRectMake(x + nowWidth + num_per_line *10,5+ (kButtonHeight+10) * num_of_line, titleWidth,kButtonHeight);

nowWidth = nowWidth + titleWidth;

}

num_per_line ++;

}

return(kButtonHeight+10) * (num_of_line +1);

}

+ (CGFloat)tagsViewHeightForTitleArray:(NSArray*)titleArray andWidth:(CGFloat)allWidth{

CGFloatnowWidth =0;

CGFloatnextWidth =0;

intnum_per_line =0;//每行btn的個(gè)數(shù)

intnum_of_line =0;//行數(shù)

for(inti =0; i titleArray.count; i ++) {

CGFloattitleWidth = [selfwidthForText:titleArray[i]andFontSize:kCommenFontheight:10];

titleWidth +=15;

nextWidth = nextWidth + titleWidth +10;

if(nextWidth allWidth) {

nextWidth =0;

nextWidth = nextWidth + titleWidth;

num_of_line ++;

nowWidth =0;

nowWidth = nowWidth + titleWidth;

num_per_line =0;

}else{

nowWidth = nowWidth + titleWidth;

}

num_per_line ++;

}

CGFloatallheight = (kButtonHeight+10) * (num_of_line +1);

returnallheight;

}

+ (NSDictionary*)tagsViewForTitleArray:(NSArray*)titleArray andWidth:(CGFloat)allWidth {

VMTagsView*tagsview = [[selfalloc]init];

CGFloatheight = [tagsviewcreatSubviewsWithWidth:allWidthtitleArray:titleArray];

return@{@"height":@(height),@"tagsview":tagsview};

}

/**

*點(diǎn)擊事件

*

*@param button

*/

- (void)buttonAction:(UIButton*)button {

UIButton*btn = (UIButton*)[self.buttonArrobjectAtIndex:self.index];

[btnsetTitleColor:kMainTextGrayColorforState:UIControlStateNormal];

btn.layer.borderColor=KColorFromRGB(0xE1E1E1).CGColor;

[buttonsetTitleColor:[UIColorredColor]forState:UIControlStateNormal];

button.layer.borderColor= [UIColorredColor].CGColor;

NSIntegerindex = [self.buttonArrindexOfObject:button];

self.buttonClickedBlock(index);

self.index= index;

}

+ (CGFloat)widthForText:(NSString*)text andFontSize:(CGFloat)fontSize height:(CGFloat)height {

NSDictionary*textDic =@{NSFontAttributeName:Font(fontSize)};

CGSizesize = [textboundingRectWithSize:CGSizeMake(0, height)options:NSStringDrawingUsesLineFragmentOriginattributes:textDiccontext:nil].size;

returnsize.width;

}

```

Git: 傳送門(mén)

Ios-自動(dòng)布局

以前做android的時(shí)候已經(jīng)覺(jué)得布局方便的不行,幾種簡(jiǎn)單的布局容器,再加上停靠和weight,基本所有需求都能滿(mǎn)足,后來(lái)接觸ios開(kāi)發(fā),一開(kāi)始還擔(dān)心自動(dòng)布局復(fù)雜,學(xué)習(xí)成本高。接觸幾天后發(fā)現(xiàn),一旦找到竅門(mén),在布局的自由度上更勝android一籌,簡(jiǎn)直就是想怎么玩就怎么玩。

一:總

自動(dòng)布局的核心用一句話表示就是:通過(guò)各種方法“確定”控件的位置和大小。這里的各種方法就是約束。

二:約束

(1)位置類(lèi)約束

以上約束來(lái)舉例,可以設(shè)置本控件的上邊距離其它控件位置點(diǎn)(位置點(diǎn)包括:上下左右和中間)的距離。這里的距離是一個(gè)等式,可以通過(guò)這樣的方式來(lái)理解:y=ax+b;y是最后設(shè)置的效果距離值,x是其他控件位置點(diǎn)的距離值,至于a,b都是你可以設(shè)置的參數(shù)值。使用時(shí),本控件的位置點(diǎn)可以按需自由的參照其他控件的位置點(diǎn)來(lái)設(shè)置約束。比如,本控件的水平中間點(diǎn)可以等于父容器控件的水平中間點(diǎn),這樣就實(shí)現(xiàn)了水平居中。

(2)大小類(lèi)約束

印象中就三個(gè):寬,高,寬高比

三:最后

位置類(lèi)約束和大小約束沒(méi)必要都使用上,只要現(xiàn)有約束已經(jīng)確定大小和位置了就沒(méi)必要加冗余約束,會(huì)引起沖突。比如,你設(shè)置了一個(gè)控件的上下左右約束,這時(shí)候不僅位置,大小也都確定了。還有文字類(lèi)的控件(UILabel類(lèi)),本身就自帶大小,所以可以不指定寬高。

待補(bǔ)充。。

iOS設(shè)計(jì)規(guī)范

狀態(tài)欄:40px???????? 導(dǎo)航欄:88px?????????標(biāo)簽欄:98px

狀態(tài)欄:40px???????? 導(dǎo)航欄:88px?????????標(biāo)簽欄:98px

狀態(tài)欄:60px???????? 導(dǎo)航欄:132px?????????標(biāo)簽欄:147px

狀態(tài)欄:132px???????? 導(dǎo)航欄:132px?????????標(biāo)簽欄:147px

狀態(tài)欄:88px???????? 導(dǎo)航欄:88px?????????標(biāo)簽欄:98px

全局邊距: 32px、30px、24px、20px(建議最小20px,邊距數(shù)字選擇偶數(shù))

卡片間距: 20px、24px、30px、40px(通常上下間距最小不低于16px,過(guò)小的間距會(huì)造成用戶(hù)的緊張情緒)

最常用的兩種布局方式,列表式和卡片式

「信息」頁(yè)面通常采用列表式布局。注:列表舒適體驗(yàn)的最小高度是80px,最大高度視內(nèi)容而定。

例: 微信高度:136px????QQ高度:132px???? 自如高度110px???? 唯品會(huì)高度:106px。

每張卡片的內(nèi)容和形式都是相互獨(dú)立的互不干擾。

卡片本身一般是白色,而卡片之間的間距顏色一般是淺色,不同產(chǎn)品風(fēng)格顏色可能不同。

雙欄卡片布局形式,常見(jiàn)于圖片信息為主導(dǎo),每一屏顯示至少4張卡片。

常見(jiàn)圖片尺寸比例:16:9、4:3、1:1、1:0.618(黃金比例)等

對(duì)齊、對(duì)稱(chēng)、分組

文字是APP中最核心的元素,是產(chǎn)品傳達(dá)給用戶(hù)的主要內(nèi)容。

在APP中字號(hào)范圍一般在20-36之間(@2x)。iOS 11中出現(xiàn)了大標(biāo)題的設(shè)計(jì),字號(hào)還是要根據(jù)產(chǎn)品屬性酌情設(shè)定。

36px: 用在少數(shù)標(biāo)題。例:導(dǎo)航標(biāo)題、分類(lèi)名稱(chēng)等。

32px: 用在少數(shù)標(biāo)題。例:店鋪標(biāo)題等。

30px: 用在較為重要的文字或操作按鈕。例:列表性標(biāo)題分類(lèi)名稱(chēng)等。

28px: 用于段落文字。例:列表性商品標(biāo)題等。

26px: 用于段落文字。例:小標(biāo)題模塊描述等。

24px: 用于輔助性文字。例:次要的標(biāo)語(yǔ)等。

22px: 用于輔助性文字。例:次要的備注信息等。

iOS 主流設(shè)備的分辨率分別是:

640x1136px:【(@2x)iPhone SE? 】

750 x1134px:【(@2x)iPhone6s/7/8? 】

1242x2208px:【(@3x)iPhone 6s/7/8 Plus? 】

1125x2436px:【(@3x)iPhone X?】

750x1624px:【(@2x)iPhone X?】

注: 基準(zhǔn)設(shè)計(jì)尺寸:750px?x?1334px。

iOS scrollView自動(dòng)布局技巧之二 - 純代碼自動(dòng)布局

目錄:

注意:

- 不管以上那種情況,scrollView 本身的大小和位置一定要相對(duì)固定!

- 可以使用frame直接設(shè)置,也可以使用自動(dòng)布局設(shè)置。

根據(jù)排列組合,共有 2*2 = 4 中情況,下面分別分析:

這種情況沒(méi)什么好說(shuō)的,直接設(shè)置即可。

這種情況相當(dāng)于是第四種情況的簡(jiǎn)化版,故請(qǐng)先看[第四種方式]。

我們知道,只要設(shè)置 scrollView 的 contentSize,就限定了 scrollView 的可滾動(dòng)范圍。所以這種情況,并不能很好的根據(jù)子控件的變化而動(dòng)態(tài)顯示完整的內(nèi)容。

所以子控件bounds變化的情況,需要使用[第四種方式]設(shè)置。

首先來(lái)做個(gè)分析:

第1條,兩種設(shè)置方式,自己根據(jù)實(shí)際情況選擇一種即可;

第2條,將所有子視圖塞進(jìn)一個(gè)容器視圖中。即先給scrollView添加一個(gè) 唯一直接子視圖 。

通俗點(diǎn)說(shuō)就是創(chuàng)建一個(gè) sizeView 設(shè)置其大小(直接設(shè)置frame或者使用autolayout設(shè)置皆可),然后將其添加到scrollView的子視圖,其他七七八八的所有小子視圖都添加在這個(gè)直接子視圖 sizeView 中,這個(gè)直接子視圖就相當(dāng)于 contentView。

這樣只要設(shè)置這個(gè)直接子視圖 sizeView 的大小和約束就好了。

如果設(shè)置好了這個(gè)直接子視圖 sizeView 的約束,那么這個(gè)直接子視圖 sizeView 的范圍就是 scrollView 的滾動(dòng)范圍嘍!

第3條,其實(shí)設(shè)置子視圖布局就2個(gè)要點(diǎn):

如圖1、圖2

圖2為豎直、水平方向皆可滾動(dòng),注意觀察滾動(dòng)條位置。

圖2為豎直、水平方向皆可滾動(dòng),注意觀察滾動(dòng)條位置。

如此設(shè)置布局是不是很方便呢?

本文名稱(chēng):ios開(kāi)發(fā)布局,iOS開(kāi)發(fā)吧
網(wǎng)站URL:http://chinadenli.net/article49/dsisoeh.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航品牌網(wǎng)站設(shè)計(jì)Google品牌網(wǎng)站建設(shè)服務(wù)器托管企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)