Masonry自動佈局與UIScrolView適配

来源:http://www.cnblogs.com/luerniu/archive/2016/09/01/5830560.html
-Advertisement-
Play Games

Masonry介紹 Masonry是一個輕量級的佈局框架 擁有自己的描述語法 採用更優雅的鏈式語法封裝自動佈局 簡潔明瞭 並具有高可讀性 而且同時支持 iOS 和 Max OS X。可以通過cocoapods將其導入。 Masonry使用 Masonry屬性及其說明 其中leading與left t ...


Masonry介紹

Masonry是一個輕量級的佈局框架 擁有自己的描述語法 採用更優雅的鏈式語法封裝自動佈局 簡潔明瞭 並具有高可讀性 而且同時支持 iOS 和 Max OS X。可以通過cocoapods將其導入。

Masonry使用

Masonry屬性及其說明

//左側

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_left;

//上側

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_top;

//右側

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_right;

//下側

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom;

//首部

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_leading;

//尾部

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing;

//寬度

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_width;

//高度

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_height;

//橫向中點

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX;

//縱向中點

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY;

//文本基線

//@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;

其中leading與left trailing與right 在正常情況下是等價的 但是當一些佈局是從右至左時(比如阿拉伯文?沒有類似的經驗) 則會對調 換句話說就是基本可以不理不用 用left和right就好了

  • 首先介紹下UIScrollView的frame與contentsize的區別

 

  • 重要說明

(1)UIScrollView的frame與contentsize屬性的區分:UIScrollView的frame指的是這個scrollview的可視範圍(可看見的區域),contentsize是其滾動範圍。

(2)contentinset(不帶*號的一般不是結構體就是枚舉),為UIScrollView增加額外的滾動區域。(上,左,下,右)逆時針。contentinset可以使用代碼或者是視圖控制器進行設置,但兩者有區別(註意區分)。

(3)contentsize屬性只能使用代碼設置。

(4)contentoffset是個CGpoint類型的結構體,用來記錄ScrollView的滾動位置,即記錄著“框”跑到了哪裡。知道了這個屬性,就知道了其位置,可以通過設置這個屬性來控制這個“框”的移動。

(5)不允許直接修改某個對象內部結構體屬性的成員,三個步驟(先拿到值,修改之,再把修改後的值賦回去)。

(6)增加了額外區域後,contentoffset的原點在哪裡?

  • 有助於理解的幾個截圖

模型圖:

對比圖:

坐標圖:

MasonryUIScrollView的自動佈局:

  • 首先確定UIScrollView的位置:相當於確定UIScrollView的frame

 

 //UIScrollView滑動界面
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.view);
        make.left.equalTo(self.view).offset(0);
        make.right.equalTo(self.view).offset(0);
        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-60);

    }];
  • 適配界面1,使界面1的top,left,heightwidth與scrollview對齊,其中在Masonry適配中top,可以與bottom或則height確定View的豎直方位,同理Left可以與right或則width確定水平位置的方位
//1界面適配
    [self.accountElectricChargeView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(@0);
        make.left.mas_equalTo(self.scrollView.mas_left);
        make.height.mas_equalTo(self.scrollView.mas_height);
        make.width.mas_equalTo(self.scrollView.mas_width);
    }];
  • 適配界面2:因為是適配水平位置,所以top仍然與scrollView的對齊,left與第一個界面的right對齊,bottom與scrollView或則第一個界面對齊
 //2界面適配
    [self.accountPeakElectricView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(@0);
        make.left.mas_equalTo(self.accountElectricChargeView.mas_right);
     make.bottom.mas_equalTo(self.scrollView);
  •      make.width.mas_equalTo(self.accountElectricChargeView.mas_width); }];
  • 適配界面3:與界面2同理
 //3界面適配
    [self.accountElectricFactorView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(@0);
        make.left.mas_equalTo(self.accountPeakElectricView.mas_right);
        make.bottom.mas_equalTo(self.scrollView);
        make.width.mas_equalTo(self.accountElectricChargeView.mas_width);
    }];
  • 最後,使scrollview的right與第三個界面(即最後一個界面)的right對齊。
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.mas_equalTo(self.accountElectricFactorView.mas_right);
    }];

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 以前一直在用ListView,,,最近才看RecyclerView發現好強大。RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4。索性就安裝一個Android Studio去開發RecyclerView吧 真是萬事開頭難,然後中間難,然後結尾難。 ...
  • Swift - 實現點擊cell動態修改高度 效果 源碼 https://github.com/YouXianMing/Swift-Animations ...
  • 補充一點遺漏的Xcode配置。 1.偏好設置。Xcode的菜單欄Xcode -> Preference Fonts & Colors可以自定義編碼區和控制台的背景、字體。 Text Editing:Line numbers顯示行數,Code folding ribbon使代碼可以摺疊,page gu ...
  • 1、項目地址 https://github.com/iamMehedi/Secured-Preference-Store 2、使用方法 2.1、存數據 2.2、 取數據 3、xml文件內容 可以看到xml文件裡面的內容都已經變成了混亂的字元,從而實現加密。 4、SecurePreferenceSto ...
  • 一:首先查看一下關於UITableViewCell重用的定義 在tableview新建的時候,會新建一個復用池(reuse pool).這個復用池可能是一個隊列,或者是一個鏈表,保存著當前的Cell.pool中的對象的復用標識符就是reuseIdentifier,標識著不同的種類的cell.所以調用 ...
  • 官方網址:http://snapkit.io/ Github: https://github.com/SnapKit/SnapKit SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. Simple & Expressive ...
  • 一、項目需求 用collectionView展示很多照片,點擊某個照片,用全屏scrollView無限迴圈的方式查看圖片。點擊放大的圖片,圖片縮小到原先的尺寸。 如圖gif1.gif所示,點擊中間的圖片,放大圖片,滑動圖片。再點擊大圖,圖片回到相應的位置。 gif1.gif gif1.gif 如圖g ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...