Ios 什么';It’在UITextField下放置一行的正确方法是什么

Ios 什么';It’在UITextField下放置一行的正确方法是什么,ios,objective-c,underline,Ios,Objective C,Underline,我希望有一个无边界的UITextField,但下面有一条1或2像素高的引导线,在字段下面加下划线。要明确的是,我不希望只在UITextField中的文本加下划线,而是要在字段中加下划线,不管它是空的还是满的 Google Material Design的示例中有一个示例: 因此,我当然可以只插入一个显示纯色的UIImage,并将其与该空间相匹配,但这似乎并不十分优雅,如果我担心我的代码将如何在几代iOS上运行,谁知道会在什么设备上运行,有没有更好的方法更“正确”和更经得起未来考验 p、 美国宁

我希望有一个无边界的UITextField,但下面有一条1或2像素高的引导线,在字段下面加下划线。要明确的是,我不希望只在UITextField中的文本加下划线,而是要在字段中加下划线,不管它是空的还是满的

Google Material Design的示例中有一个示例:

因此,我当然可以只插入一个显示纯色的UIImage,并将其与该空间相匹配,但这似乎并不十分优雅,如果我担心我的代码将如何在几代iOS上运行,谁知道会在什么设备上运行,有没有更好的方法更“正确”和更经得起未来考验


p、 美国宁愿使用Obj-C从头开始做这件事,也不愿找到一个库。

事实上,我昨天刚刚做了这件事。。。子类UITextField,这将起作用

注意:使用textFieldDidBeginEditing:和textFieldDidEndEditing:通过NSNotificationCenter或委托方法更改行高和颜色会更简洁

- (void)setup 
{
    self.hairlineLayer = [CALayer layer];
    self.hairlineLayer.backgroundColor = [UIColor materialTextDarkDividerColor].CGColor;
    [self.layer addSublayer:self.hairlineLayer];
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    CGFloat hairlineHeight = 0;
    if (self.isFirstResponder) {
        self.hairlineLayer.backgroundColor = [UIColor redColor].CGColor;
        hairlineHeight = 1.4;
    } else {
        self.hairlineLayer.backgroundColor = [UIColor grayColor].CGColor;
        hairlineHeight = 1/[UIScreen mainScreen].scale;
    }

    self.hairlineLayer.frame = CGRectMake(0, CGRectGetHeight(self.bounds) - hairlineHeight, CGRectGetWidth(self.bounds), hairlineHeight);
}

创建一个新的全局类

在GlobalClass.h中声明一个方法

+(void)UnderLineStyleTextField:(UITextField *)textField;
在GlobalClass.m中定义一个方法

+(void)UnderLineStyleTextField:(UITextField *)textField
{
CALayer *textFieldbottomBorder = [CALayer layer];
textFieldbottomBorder.frame = CGRectMake(0.0f, textField.frame.size.height - 1, textField.frame.size.width, 1.0f);
textFieldbottomBorder.backgroundColor = [UIColor blackColor].CGColor;
[textField.layer addSublayer:textFieldbottomBorder];
}
在ViewController中导入GlobalClass

从ViewDidLoad调用GlobalClass方法

[GlobalClass UnderLineStyleTextField:txtForgotPasswods];

太好了,谢谢,顺便问一下,为什么要使用1/[UIScreen mainScreen]。灰色条的比例是1.4,但编辑颜色没有分割?我想要1.4,所以编辑时它有点厚,我使用1/[UIScreen mainScreen]。比例是因为这是UITableViewCells的确切分割宽度,它总是为分隔符提供一个一致的好尺寸。是的,但我很困惑,这完全是我的问题,哈哈,但是做1.4/[UIScreen mainscreen.scale]有意义吗;出于同样的原因,你不能单独使用1.0?我问你只是因为我困惑,而不是因为我认为你错了,我只是简单的困惑巴西人!是的,当然这听起来也是个好主意,但是只要使用你想要的任何尺寸的分隔器,任何看起来适合你的!冷静点,我的朋友。我实现了一些非常接近这一点的东西,但当我对其使用自动布局约束时,文本区域内的文本会向底线移动一两个像素,不确定这是否是我的简单标题更改,这会发生在你身上吗?