日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[转]设置 UILabel 和 UITextField 的 Padding 或 Insets

發布時間:2025/3/19 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]设置 UILabel 和 UITextField 的 Padding 或 Insets 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

iOS?的控件,只看到?UIButton?可以設置 Padding/Insets,即按鈕上文字或圖片與按鈕邊界的間隙,對與?CSS?來說叫做 Padding,在?iOS?中叫做?Insets,UIButton?設置?Insets?相應的屬性如下:

Configuring Edge Insets

????? contentEdgeInsets? property
????? titleEdgeInsets? property
????? imageEdgeInsets? property?

它們接受的屬性類型是:UIEdgeInsets,由函數 UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right );???? 構造出,分別表示其中的內容/標題/圖片離各邊的距離。

在?xib?中也有界面來對按鈕的這三個?EdgeInsets?屬性的設置,分別是按鈕的?Edge?和?Inset?屬性。

印像中,Swing?的許多組件都可設置?Insets?屬性,可對于?iOS?的控件就沒那么幸運了,比如我想設置?UILable?或?UITextField?中的文本離邊界的間隙,無倫是在?xib?里還是直接代碼的方式都無能為力,因為它們根據未開放相應的屬性讓你去控制。

辦法當然還是有的,自定義相應自己的控件了,比如 InsetsLabel?或是? InsetsTextField,接著就是覆蓋某些個方法來達成。

首先來看?UILabel?的子類 InsetsLabel?的實現代碼:

//1.header file #import <UIKit/UIKit.h>@interface InsetsLabel : UILabel @property(nonatomic) UIEdgeInsets insets; -(id) initWithFrame:(CGRect)frame andInsets: (UIEdgeInsets) insets; -(id) initWithInsets: (UIEdgeInsets) insets; @end//2. implementation file #import "InsetsLabel.h"@implementation InsetsLabel @synthesize insets=_insets; -(id) initWithFrame:(CGRect)frame andInsets:(UIEdgeInsets)insets {self = [super initWithFrame:frame];if(self){self.insets = insets;}return self; }-(id) initWithInsets:(UIEdgeInsets)insets {self = [super init];if(self){self.insets = insets;}return self; }-(void) drawTextInRect:(CGRect)rect {return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.insets)]; }


關鍵就是覆蓋了 -(void) drawTextInRect: (CGRect) rect;?方法,在畫??Label?的文本時分別設置文本與??Label?四個邊的間隙,即畫在?Label?內的一個小矩形內,這個例子提供了便利的構造函數,提供自己的 UIEdgeInsets?屬性。另外,函數?UIEdgeInsetsInsetRect(CGRect, UIEdgeInsets)?應該是好理解的。

再看如何設置?UITextField?中文本到四邊的間距,這里也可以定義自己的?InsetsTextField:

// // Created by Unmi on 11/2/11. // Copyright (c) 2011 http://unmi.cc. All rights reserved. //#import <UIKit/UIKit.h>@interface InsetsTextField : UITextField @end@implementation InsetsTextField //控制 placeHolder 的位置,左右縮 20 - (CGRect)textRectForBounds:(CGRect)bounds {return CGRectInset( bounds , 20 , 0 ); // CGRect inset = CGRectMake(bounds.origin.x + 10, bounds.origin.y, bounds.size.width - 10, bounds.size.height); //更好理解些 // return inset; }// 控制文本的位置,左右縮 20 - (CGRect)editingRectForBounds:(CGRect)bounds {return CGRectInset( bounds , 20 , 0 ); //CGRect inset = CGRectMake(bounds.origin.x + 10, bounds.origin.y, bounds.size.width - 10, bounds.size.height); // return inset; } @end//----------------------------------------------------------------- //下面是使用 InsetsTextField 的代碼,可放在 viewDidLoad 等代理方法中 InsetsTextField *insetTextField = [[InsetsTextField alloc]initWithFrame:CGRectMake(10, 10, 180, 25)];//須手動設置它的 borderStyle, 不然看不到邊框的 insetsTextField.borderStyle = UITextBorderStyleRoundedRect; [self.view addSubview:insetsTextField]; [insetsTextField release];


效果如下:

上面更像是借鑒的?InsetsLabel?的實現,其實對于 UITextField?還有更好的實現辦法,而且更簡單,因為?UITextFiled?原來就支持的做法。比如它可以讓你做出在文本框最前方固定一個 $ 符號,表示這個文本框是輸入錢的,第一個$ 是不能被刪除的。確實,你可以在 TextField?上貼個?Label,然后文本框的光標后移,稍顯麻煩了。

而 UITextField?可以直接設置 leftView?或 rightView,?然后文本輸入區域就在 leftView?和 rightView?之間了,看例子:

UILabel *paddingView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 25)]; paddingView.text = @"$"; paddingView.textColor = [UIColor darkGrayColor]; paddingView.backgroundColor = [UIColor clearColor]; textfield.leftView = paddingView; textfield.leftViewMode = UITextFieldViewModeAlways;

rightView?也是一樣的設置方式,其中的? Mode?有四種,看到名字應該不難理解:

??? UITextFieldViewModeNever,
??? UITextFieldViewModeWhileEditing,
??? UITextFieldViewModeUnlessEditing,
??? UITextFieldViewModeAlways

它的效果呢就更酷了:

文本框的起始光標是從上圖數字 1?位置開始的。

實際應用中,對于?UITextField?如果有類似的需求,我會毫不猶豫的使用 leftView/rightView?屬性來設置。

參考:1.?http://stackoverflow.com/questions/2694411/text-inset-for-uitextfield
??????????? 2.?http://stackoverflow.com/questions/5674655/uitextfield-align-left-margin

轉載于:https://my.oschina.net/leeming/blog/51818

總結

以上是生活随笔為你收集整理的[转]设置 UILabel 和 UITextField 的 Padding 或 Insets的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。