`
zjjzmw1
  • 浏览: 1365177 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

改变ios控件行间距。

    博客分类:
  • iOS
阅读更多

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 的实现代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//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:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//
//  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 );
}
 
// 控制文本的位置,左右缩 20
- (CGRect)editingRectForBounds:(CGRect)bounds {
    return CGRectInset( bounds , 20 , 0 );
}
@end
 
//-----------------------------------------------------------------
//下面是使用 InsetsTextField 的代码,可放在 viewDidLoad 等代理方法中
InsetsTextField *insetTextField = [[InsetsTextField alloc]
                                  initWithFrame:CGRectMake(10, 10, 180, 25)];
 
//须手动设置它的 borderStyle, 不然看不到边框的
insetsTextField.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:insetsTextField];
[insetsTextField release];

效果如下:

 

Unmi InsetsTextField

上面更像是借鉴的 InsetsLabel 的实现,其实对于 UITextField 还有更好的实现办法,而且更简单,因为 UITextFiled 原来就支持的做法。比如它可以让你做出在文本框最前方固定一个 $ 符号,表示这个文本框是输入钱的,第一个$ 是不能被删除的。确实,你可以在 TextField 上贴个 Label,然后文本框的光标后移,稍显麻烦了。

而 UITextField 可以直接设置 leftView 或 rightView, 然后文本输入区域就在 leftView 和 rightView 之间了,看例子:

1
2
3
4
5
6
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,
    UITextFieldViewModeU

 

更多0
分享到:
评论

相关推荐

    iOS 各种UI控件大全

    例如,为按钮添加图像,调整标签的行间距,监听开关状态变化以执行相应逻辑,以及处理WebView中的JavaScript与Swift的交互。在“各种UIDemo综合”这个项目中,应该包含了这些控件的更多实例和应用场景,供学习者深入...

    lable的行间距和字间距的设置

    在iOS中,`UILabel`并没有直接提供设置行间距的属性,但可以通过自定义`NSAttributedString`来实现。我们可以使用`NSMutableParagraphStyle`对象来创建一个包含自定义行距的段落样式,然后将其应用到`...

    IOS开发控件源代码 UICatalog

    UICatalog演示了如何设置字体、颜色、行间距等属性。 3. UIImageView:显示图像的控件,可以加载本地或网络资源,支持图片缩放、裁剪等操作。 4. UISlider和UISwitch:分别用于数值选择和开关控制,它们的事件处理...

    iOS Label的自适应高度和字间距行距

    paragraphStyle.lineSpacing = 10 // 行间距 let attributedString = NSMutableAttributedString(string: "自定义行距") attributedString.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange...

    UITextView 修改行间距(iOS源代码)

    如果你需要在特定范围内改变行间距,可以使用`NSAttributedStringKey`。例如,你可以为不同的部分设置不同的行间距,只需要在创建`NSMutableAttributedString`时指定不同的`NSParagraphStyle`。 4. **KVC(Key-...

    label自适应高度可设置行间距字间距

    在iOS开发中,`UILabel`是用于展示单行或多行文本的重要控件。然而,标准的`UILabel`并不直接支持自适应高度、行间距和字间距的设置。开发者经常需要通过一些技巧来实现这些功能,以提升用户界面的美观度和阅读体验...

    CollectionView cell间距

    在iOS开发中,UICollectionView是一种非常重要的布局控件,它允许我们以网格或流式布局展示大量数据,并且具有高度自定义的能力。在这个“CollectionView cell间距”的示例中,我们将探讨如何调整UICollectionView中...

    ios-UILabel的简单封装.zip

    在iOS开发中,UILabel是用于显示单行或多行文本的常用控件。此资源"ios-UILabel的简单封装.zip"提供了一个对UILabel的轻量级封装,以增强其功能,特别是针对用户交互、文本格式化和自定义外观。以下是封装中涉及的...

    IOS聊天软件的图文混排

    在iOS聊天应用中,`UILabel`、`UIImageView` 和 `UIButton` 是最常见的控件,它们分别用于显示文本、图片和交互操作。 2. **文字和图片混排**:为了在同一个视图中混合显示文字和图片,开发者通常会使用自定义的`...

    iOS 设置UILabel的行间距并自适应高度的方法

    在iOS开发中,`UILabel` 是一个非常常用的控件,用于显示单行或多行文本。在某些场景下,我们可能需要设置`UILabel`的行间距并让其自适应内容的高度。下面将详细介绍如何实现这个功能。 首先,创建一个`UILabel`...

    UICatalog苹果控件源码大全

    在UICatalog中,你可以看到如何设置字体、颜色、对齐方式以及行间距等属性。 2. **UIButton**: 按钮控件,常用于触发某些操作。源码中会展示不同类型的按钮样式,如系统按钮、定制图像按钮等,以及如何添加点击事件...

    swift学习控件篇:UICollectionView

    Swift学习控件篇聚焦于UICollectionView,这是一个强大的iOS和macOS平台上的UI组件,用于展示可滚动的、排列有序的视图集合。在iOS应用开发中,UICollectionView常用于创建网格布局、瀑布流布局以及自定义复杂布局,...

    ios-一句代码设置UIButton的image和title的左右上下布局以及image和title的间距.zip

    在这个项目"ios-一句代码设置UIButton的image和title的左右上下布局以及image和title的间距"中,作者Coder-ZJ提供了一个简洁的解决方案,通过一个简单的调用来调整这些属性。 在UIButton的默认设置下,image和title...

    IOS富文本显示(标准化代码)

    压缩包中的`TQRichTextView`可能是一个自定义的视图控件,它扩展了标准的`UILabel`或`UITextView`,提供了更丰富的富文本显示功能,比如点击超链接事件的处理、自定义行间距等功能。使用这样的自定义控件,可以使...

    ios-一行代码计算Cell高度支持cell嵌套tableview.zip

    在实际的iOS开发中,动态计算UITableViewCell的高度是一项挑战,因为这需要考虑到Cell内的内容、字体大小、行间距等因素。传统的做法是实现UITableViewDelegate的`heightForRowAtIndexPath:`方法,但这种方法在Cell...

    swift-一款轻量级的基于CoreText富文本控件(iOSObjective-C)

    通过CoreText,开发者可以实现自定义的文本渲染,包括字体、颜色、下划线、行间距等样式控制。然而,CoreText的API相对复杂,直接使用需要较多的代码量,因此,这个轻量级的CoreText控件应运而生,旨在简化富文本的...

    优看TXTSDK For iOS(含源码)

    - 支持设置行间距 - 支持设置文字颜色,背景色 - 支持夜间模式 - 支持搜索 - 支持文字选择,添加笔记,显示书签等操作 - 支持目录提取(可自定义) - 支持页面缩放 - 支持其他基本阅读功能 优看TXTSDK For iOS支持下列...

    IOS 自定义一个PickView

    这包括设置文字颜色、背景色、行间距等。还可以添加图片或者更复杂的视图元素。 4. **滚动逻辑**:为了实现滚动功能,我们可以使用UIScrollView或者CADisplayLink。当用户滚动时,更新显示的内容,并触发相应的回调...

Global site tag (gtag.js) - Google Analytics