1. 程式人生 > >Masonry適配——(3)UILable如何設定多行顯示

Masonry適配——(3)UILable如何設定多行顯示

UILabel在使用過程中,一個重要的特性是可以進行多行顯示,或者是自定義顯示行數。同時呢,在設定多行顯示的過程中,還可以計算出label所需要的高度。

但不管是使用frame,還是使用masonry進行設定,都需要設定顯示行數屬性,即屬性"numberOfLines"。

當在使用frame設定時,可以很好的計算其高度,而在使用masonry時,既可以設定高度約束進行多行顯示,也可以不設定高度約束進行多行自適應顯示。

那masonry時具體應該怎麼進行設定呢?多行顯示是又怎麼設定呢?

有兩種情況供參考。

情況1:設定屬性後,然後根據文字自動多行顯示,無需設定標籤高度約束

1 屬性preferredMaxLayoutWidth

,如:label.preferredMaxLayoutWidth = (WidthScreen - 10.0 * 2);

2 方法setContentHuggingPriority:forAxis:,如:[label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

3 屬性numberOfLines,如:label.numberOfLines = 0;

4 自適應label多行顯示時,無需設定label高度,即無需寫以下程式碼:make.height.mas_equalTo(???); 

情況2:設定多行屬性,然後計算文字高度,再設定高度約束(不足:可能導致文字顯示不全

1 屬性numberOfLines,如:label.numberOfLines = 0;

2 計算高度height,如:CGFloat height = [label4.text boundingRectWithSize:CGSizeMake((WidthScreen - 2 * 10.0), MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label4.font} context:nil].size.height;

3 設定標籤高度約束,如:make.height.mas_equalTo(height);

使用masonry設定label顯示的效果如下圖所示:

情況1(自適應多行全部顯示)                             情況2(計算高度多行顯示,偶爾顯示不全)

     

具體見程式碼:

NSString *text = @"Masonry是一個輕量級的佈局框架與更好的包裝AutoLayout語法。Masonry有它自己的佈局方式,描述NSLayoutConstraints使佈局程式碼更簡潔易讀。Masonry支援iOS和Mac OS X。Masonry github 地址:https://github.com/SnapKit/Masonry";
UILabel *label4 = [[UILabel alloc] initWithFrame:CGRectZero];
[self.view addSubview:label4];
label4.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.3];
label4.text = text;
// 多行顯示時設定
// 情況1
label4.preferredMaxLayoutWidth = (WidthScreen - 10.0 * 2);
[label4 setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
label4.numberOfLines = 0;
[label4 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(10.0);
        make.right.mas_equalTo(-10.0);
        make.top.mas_equalTo(currentView.mas_bottom).offset(10.0);
        
        // 自適應label多行顯示時,無需設定label高度
        // make.height.mas_equalTo(40.0);
}];
// 情況2(不足:可能導致文字顯示不全)
label4.numberOfLines = 0;
CGSize size = [label4.text boundingRectWithSize:CGSizeMake((WidthScreen - 2 * 10.0), MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label4.font} context:nil].size;
CGFloat heightText = size.height;
[label4 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(10.0);
        make.right.mas_equalTo(-10.0);
        make.top.mas_equalTo(currentView.mas_bottom).offset(10.0);
   
        // 設定實際文字高度約束
        make.height.mas_equalTo(heightText);
}];


注意:使用masonry進行label的多行顯示設定時,主要是涉及以下三個引數的設定

1、@property(nonatomic)CGFloat preferredMaxLayoutWidth

2、- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis

3、@property(nonatomic)NSInter numberOfLines

相關推薦

Masonry——3UILable如何設定顯示

UILabel在使用過程中,一個重要的特性是可以進行多行顯示,或者是自定義顯示行數。同時呢,在設定多行顯示的過程中,還可以計算出label所需要的高度。 但不管是使用frame,還是使用masonr

移動端3---rem

span meta view strong on() font doc nts cti rem適配 <meta name="viewport" content="width=device-width,user-scalable=no"/> <script

Masonry——7UITableView中自定義UITableViewCell高度自適應及計算

在UITableView列表的使用中,因為在自定義的UITableViewCell中頁面相對複雜,所以會出現每一個cell都有不同的高度。這時候就需要根據實際內容進行cell的更新約束,其實說到底也就是哪些UI子檢視應該顯示,或隱藏,哪些UILabel標籤高度是這個數值,

第九章 語言環境的支援和螢幕的3

9.3.4詳細說明DensityDensity值,表示每英寸有多少個顯示點,它與螢幕解析度是兩個概念。HVGA屏density=160;QVGA屏density=120;WVGA屏density=240;WQVGA屏density=120。apk的資源包中,當螢幕densit

Android

設計 固定 屏幕尺寸 inf bubuko bsp 單位 屏幕 打印機 一、Android適配基礎參數 1.常見分辨率(px) oppx 2340x1080 oppR15 2280x1080 oppor11sp 2160*1080 1

移動端2---viewport

float scala screen bsp pen meta log initial width 通過viewport來適配 <script> (function(){   var w=window.screen.width;   console.log(w)

移動端螢幕 @media

@media screen and (max-width: 300px) {     body {         background-color:lightblue;     } } Media Queries能在不同的條件下使用不同的樣式,使頁面在不同在終端裝置下達到

聊聊android

       上一篇我們主要了解了為什麼適配,以及怎麼適配,同時給出了部分切圖規範,和在開發過程中需要的一些注意事項,這一遍主要從官方給出的指導建議出發,從視覺的角度來說說怎麼適配。 度量單位和網格 48 dp 的設計韻律 一般來說,可觸控控制元件以

【前端庫】HTML 移動端推薦

案例單擊我 上一篇文章我寫了,關於移動端適配問題,傳送門開,這一次也關於移動端適配問題,這個方式比較常用。我經常在公司得專案中使用 直接貼上適配程式碼: /* * @Author: a * @D

iOS 字型

目前為止,iPhone螢幕尺寸已經有四種: 3.5(inch):1/3G/3GS/4/4S 4.0(inch):5/5S/5C 4.7(inch):6 5.5(inch):6Plus 看一下iPhone4~6(+)的螢幕高寬比: iPhone

android之螢幕實踐dimens.xml尺寸不同的平板

android3.2以後,為了提供更精準的對佈局檔案的控制,可以通過為資原始檔(res目錄下檔案)增加字尾來指定該資料夾裡的xml佈局檔案或color.xml,string.xml是為哪種大小的螢幕使用。 第一種字尾:sw<N>dp,如layout-sw600

Android螢幕dp、px、dpi、sp的理解

在Android開發過程中,螢幕適配往往是開發人員比較忽視的一個知識點。往往這些被忽視的東西在遇到問題的時候會耗費你比較多的時間。所以對於初級程式設計師來說理解掌握適配的一些基本知識是必須的。(大牛請

android-螢幕

此文是根據慕課網的android視訊自主學習整理的,視訊地址。 一.有關螢幕的重要概念 1.什麼是螢幕尺寸、螢幕密度、螢幕畫素密度? a. 螢幕尺寸就是手機螢幕的對角線長度。 單位是英寸,1英寸 = 2.54釐米 b. 螢幕解析度就

Android P 開發者預覽版

為確保您的應用在 Android P 上表現出最佳的外觀和行為,請按照此頁面中的說明,利用 Android P Preview SDK 構建並執行您的應用。Android P Preview SDK 包含一些不相容 Android Studio 3.0 的變更。您可以使用 Android Studio 3.1

我的iOS11及iPhoneX

今天說說在iPhoneX適配碰到的問題: 一、部分頁面頂部超過了iPhoneX的“劉海” 二、部分頁面底部被虛擬home按鍵遮擋。 造成以上問題是: 一、iPhoneX 的狀態列高度產

SQL SERVER大話存儲結構3_數據結構

bits 基礎 就會 mar ant rain 版權 bpa 一個數 一行數據是如何來存儲的呢? 變長列與定長列,NULL與NOT NULL,實際是如何整理存放到 8k的數據頁上呢? 對表格進行增減列,修改長度,添加默認值等DDL S

第一代碼:以太坊3-使用更的工具編寫和測試智能合約

ppr 3.2 mage ethereum output con 來看 led ron 《第一行代碼:以太坊》開始連載了 在上文中已經使用了Remix環境運行和測試了本書編寫的第一個智能合約程序,不過編寫和測試智能合約的測試方式很多,例如,在testrpc環境測試;在Int

第一程式碼:以太坊3-使用更的工具編寫和測試智慧合約

在上文中已經使用了Remix環境執行和測試了本書編寫的第一個智慧合約程式,不過編寫和測試智慧合約的測試方式很多,例如,在testrpc環境測試;在Intellij IDEA整合開發環境中用Solidity語言編寫智慧合約;在純Web環境中測試智慧合約;使用AJAX方式測試智慧合約等。本文將詳細介紹這些

Akka-CQRS3- 再想點,全面點

default 目標 不能 send 所在 如何 兩個 buffers 項目內容 上篇我介紹了CQRS模式存寫部分的具體實現和akka-persistence一些函數和消息的用法。在這篇本來是準備直接用一個具體的例子來示範CQRS模式編程,主要是寫端,或者是數據采集端

shell腳本編程小技巧2——如何解決重定,變量不被shell解釋

tps log shell腳本 ces ESS size 分享 sha blog 參考資料 https://blog.csdn.net/ccwwff/article/details/48519119 例子 原理 ![]shell腳本編程小技巧(2)——如何解決多行重定,