iOS開發Label文字顯示位置(上、中、下)

来源:https://www.cnblogs.com/guozhihe/archive/2020/06/01/13023566.html
-Advertisement-
Play Games

在系統自帶的UILabel中是沒有吸頂及吸底部的方法的(如果有請告訴我,我沒找到),於是乎重寫label 1 // 2 // gzhVerticalAlignmentLabel.h 3 // VerticalAlignmentLabel 4 // 5 // Created by 郭志賀 on 202 ...


在系統自帶的UILabel中是沒有吸頂及吸底部的方法的(如果有請告訴我,我沒找到),於是乎重寫label

 1 //
 2 //  gzhVerticalAlignmentLabel.h
 3 //  VerticalAlignmentLabel
 4 //
 5 //  Created by 郭志賀 on 2020/6/1.
 6 //  Copyright © 2020 郭志賀. All rights reserved.
 7 //
 8 
 9 #import <UIKit/UIKit.h>
10 
11 NS_ASSUME_NONNULL_BEGIN
12 
13 typedef enum VerticalAlignment {
14 
15     VerticalAlignmentTop,
16 
17     VerticalAlignmentMiddle,
18 
19     VerticalAlignmentBottom,
20 
21 } VerticalAlignment;
22 
23 @interface gzhVerticalAlignmentLabel : UILabel{
24 
25 @private VerticalAlignment verticalAlignment_;
26 
27 }
28 
29 
30 
31 @property (nonatomic, assign) VerticalAlignment verticalAlignment;
32 
33 @end
34 
35 NS_ASSUME_NONNULL_END
 1 //
 2 //  gzhVerticalAlignmentLabel.m
 3 //  VerticalAlignmentLabel
 4 //
 5 //  Created by 郭志賀 on 2020/6/1.
 6 //  Copyright © 2020 郭志賀. All rights reserved.
 7 //
 8 
 9 #import "gzhVerticalAlignmentLabel.h"
10 
11 @implementation gzhVerticalAlignmentLabel
12 
13 @synthesize verticalAlignment = verticalAlignment_;
14 
15 
16 
17 
18 - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {
19 
20     verticalAlignment_ = verticalAlignment;
21 
22     [self setNeedsDisplay];
23 
24 }
25 
26 
27 
28 - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
29 
30     CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
31 
32     switch (self.verticalAlignment) {
33 
34         case VerticalAlignmentTop:
35 
36             textRect.origin.y = bounds.origin.y;
37 
38             break;
39 
40         case VerticalAlignmentBottom:
41 
42             textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;
43 
44             break;
45 
46         case VerticalAlignmentMiddle:
47 
48 
49         default:
50 
51             textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;
52 
53     }
54 
55     return textRect;
56 
57 }
58 
59 
60 
61 -(void)drawTextInRect:(CGRect)requestedRect {
62 
63     CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
64 
65     [super drawTextInRect:actualRect];
66 
67 }
68 
69 @end

使用方式

 1 //
 2 //  ViewController.m
 3 //  VerticalAlignmentLabel
 4 //
 5 //  Created by 郭志賀 on 2020/6/1.
 6 //  Copyright © 2020 郭志賀. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 #import "gzhVerticalAlignmentLabel.h"
11 
12 /** 屏幕高度 */
13 #define ScreenH [UIScreen mainScreen].bounds.size.height
14 /** 屏幕寬度 */
15 #define ScreenW [UIScreen mainScreen].bounds.size.width
16 
17 @interface ViewController ()
18 
19 @property(nonatomic,strong)gzhVerticalAlignmentLabel * topLabel;
20 @property(nonatomic,strong)gzhVerticalAlignmentLabel * centerLabel;
21 @property(nonatomic,strong)gzhVerticalAlignmentLabel * bottomLabel;
22 
23 @end
24 
25 @implementation ViewController
26 
27 - (void)viewDidLoad {
28     [super viewDidLoad];
29     // Do any additional setup after loading the view.
30     
31     _topLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, 100, 200, 80)];
32     _topLabel.verticalAlignment = VerticalAlignmentTop;
33     _topLabel.backgroundColor = [UIColor redColor];
34     _topLabel.font = [UIFont systemFontOfSize:15];
35     _topLabel.textAlignment = NSTextAlignmentCenter;
36     _topLabel.text = @"文字頂部顯示";
37     [self.view addSubview:_topLabel];
38     
39     _centerLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, CGRectGetMaxY(_topLabel.frame)+10, 200, 80)];
40     _centerLabel.verticalAlignment = VerticalAlignmentMiddle;
41     _centerLabel.backgroundColor = [UIColor redColor];
42     _centerLabel.font = [UIFont systemFontOfSize:15];
43     _centerLabel.textAlignment = NSTextAlignmentCenter;
44     _centerLabel.text = @"文字中間顯示";
45     [self.view addSubview:_centerLabel];
46     
47     
48     _bottomLabel = [[gzhVerticalAlignmentLabel alloc]initWithFrame:CGRectMake((ScreenW-200)/2.0, CGRectGetMaxY(_centerLabel.frame)+10, 200, 80)];
49     _bottomLabel.verticalAlignment = VerticalAlignmentBottom;
50     _bottomLabel.backgroundColor = [UIColor redColor];
51     _bottomLabel.font = [UIFont systemFontOfSize:15];
52     _bottomLabel.textAlignment = NSTextAlignmentCenter;
53     _bottomLabel.text = @"文字底部顯示";
54     [self.view addSubview:_bottomLabel];
55 }
56 
57 
58 @end

 


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

-Advertisement-
Play Games
更多相關文章
  • 近年來,片上存儲器發展迅速,根據國際半導體技術路線圖(ITRS),隨著超深亞微米製造工藝的成熟和納米工藝的發展,晶體管特征尺寸進一步縮小,半導體存儲器在片上存儲器上所占的面積比例也越來越高。接下來宇芯電子介紹SRAM的工作原理以及工作過程。 SRAM 寫操作。寫操作就是把數據寫入指定的SRAM 存儲 ...
  • Lua基本語法 表類型 函數 Redis執行腳本 KEYS與ARGV 沙盒與隨機數 腳本相關命令 原子性和執行時間 Lua是一種高效的輕量級腳本語言,能夠方便地嵌入到其他語言中使用。在Redis中,藉助Lua腳本可以自定義擴展命令。 Lua基本語法 數據類型 空(nil),沒有賦值的變數或表的欄位值 ...
  • 問題 SQL Server在很多企業中部署在多個平臺上(Windows,Linux和Container),需要一種能支持多平臺的解決方案用於收集和展示相關的監控指標。 我選擇企業中比較流行的監控展示工具Grafana和監控指標收集工具Telegraf進行實現。這也是為了方便與企業中已經在存在監控平臺 ...
  • 一、將哈希表 key 中的欄位 field 的值設為 value 命令:hset 格式:hset key field value 127.0.0.1:6379> hset hash_key key1 v1 (integer) 1 127.0.0.1:6379> hset hash_key key2 ...
  • 表結構 student(StuId,StuName,StuAge,StuSex) 學生表 teacher(TId,Tname) 教師表 course(CId,Cname,C_TId) 課程表 sc(SId,S_CId,Score) 成績表 問題十四:查詢和“1002”號的同學學習的課程完全相同的其他 ...
  • 本文轉自Rancher Labs 簡 介 本文將介紹在高可用K3s Kubernetes集群上安裝Rancher 2.4的過程並針對MySQL利用Microsoft Azure資料庫的優勢,該資料庫消除了對etcd的依賴,併為我們提供了Azure在這一服務中的所有其他功能。 在本文中,你將瞭解到只使 ...
  • ​ 本章我們開始正式搭建大數據環境,目標是構建一個穩定的可以運維監控的大數據環境。我們將採用Ambari搭建底層的Hadoop環境,使用原生的方式搭建Flink,Druid,Superset等實時計算環境。使用大數據構建工具與原生安裝相結合的方式,共同完成大數據環境的安裝。 Ambari搭建底層大數 ...
  • 本文來源於公眾號【胖滾豬學編程】,轉載請註明出處。 從今天開始,想和你一起死磕ElasticSearch,學習分散式搜索引擎,跟著胖滾豬就對了! 既然是ES的第一課,那麼最重要的是讓你愛上它!不想說那些單純的優勢、概念了,直接上大廠的生產案例,才是最能吸引你的!跟著大廠走,沒問題的! 為啥選擇ES? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...