ios - 在 UITextField 下放置一行的正确方法是什么

标签 ios objective-c underline

我想要一个无边框的 UITextField,但下面有一个 1 或 2 像素高的引导线,用于强调该字段。需要明确的是,我不希望 UITextField 内的文本带有下划线,而是该字段,无论是空的还是充满文本的。

在 Google Material Design 的这个例子中可以看到一个例子:

enter image description here

所以当然我可以坚持使用显示纯色的 UIImage 并将其适合该空间,但这似乎不太优雅,如果我担心,有没有更好的方法更“正确”和面向 future 关于我的代码将如何在几代 iOS 上运行以及谁知道哪些设备?

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

最佳答案

实际上,我昨天才这样做...子类 UITextField ,这将起作用。

注意:虽然使用 textFieldDidBeginEditing: 和 textFieldDidEndEditing: 通过 NSNotificationCenter 或委托(delegate)方法来更改行高和颜色会更干净。

- (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);
}

关于ios - 在 UITextField 下放置一行的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944028/

相关文章:

ios - 应用程序删除和 APNS

objective-c - Assets 加载后立即定位到 AVPlayer 中的某个位置

ios - 将第二个 Storyboard Controller 分配给第一个 Storyboard选项卡栏项目。

ios - 如何确定 "z-index of a shadow"

iphone - Storyboard和 pageControl 有什么区别?

Flutter:如何制作带有 HintText 但没有下划线的 TextField?

html - 如何将动态的一段文字加下划线到行尾?

ruby-on-rails - 使用 Prawn 自定义下划线

ios - 我们如何通过 distinctuntilChange 只允许 2 个不同的项目来过滤 Observable

objective-c - Objective-C "do - while"