我只想把边框保持在UITextField秒的底部. 但我不知道我们怎么才能把它放在底部.

你能给我提个建议吗?

推荐答案

我正在创建custom textField,使其成为SwiftUI的可重用组件

SwiftUI

struct CustomTextField: View {
    var placeHolder: String
    @Binding var value: String
    
    var lineColor: Color
    var width: CGFloat
    
    var body: some View {
        VStack {
            TextField(self.placeHolder, text: $value)
            .padding()
            .font(.title)
            
            Rectangle().frame(height: self.width)
                .padding(.horizontal, 20).foregroundColor(self.lineColor)
        }
    }
}

Usage:个个个

@Binding var userName: String
@Binding var password: String

var body: some View {
    VStack(alignment: .center) {
        CustomTextField(placeHolder: "Username", value: $userName, lineColor: .white, width: 2)
        CustomTextField(placeHolder: "Password", value: $password, lineColor: .white, width: 2)
    }
}


Swift 5.0

我在这里使用视觉格式化语言(VFL),这将允许添加行到任何UIControl.

您可以创建一个UIView扩展类,比如UIView+Extention.swift

import UIKit

enum LinePosition {
    case top
    case bottom
}

extension UIView {
    func addLine(position: LinePosition, color: UIColor, width: Double) {
        let lineView = UIView()
        lineView.backgroundColor = color
        lineView.translatesAutoresizingMaskIntoConstraints = false // This is important!
        self.addSubview(lineView)

        let metrics = ["width" : NSNumber(value: width)]
        let views = ["lineView" : lineView]
        self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[lineView]|", options:NSLayoutConstraint.FormatOptions(rawValue: 0), metrics:metrics, views:views))

        switch position {
        case .top:
            self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[lineView(width)]", options:NSLayoutConstraint.FormatOptions(rawValue: 0), metrics:metrics, views:views))
            break
        case .bottom:
            self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[lineView(width)]|", options:NSLayoutConstraint.FormatOptions(rawValue: 0), metrics:metrics, views:views))
            break
        }
    }
}

Usage:个个个

textField.addLine(position: .LINE_POSITION_BOTTOM, color: .darkGray, width: 0.5)

Objective C:

您可以将此助手方法添加到全局助手类(我使用了全局类方法)或同一视图控制器(使用实例方法).

typedef enum : NSUInteger {
    LINE_POSITION_TOP,
    LINE_POSITION_BOTTOM
} LINE_POSITION;


- (void) addLine:(UIView *)view atPosition:(LINE_POSITION)position withColor:(UIColor *)color lineWitdh:(CGFloat)width {
    // Add line
    UIView *lineView = [[UIView alloc] init];
    [lineView setBackgroundColor:color];
    [lineView setTranslatesAutoresizingMaskIntoConstraints:NO];
    [view addSubview:lineView];
    
    NSDictionary *metrics = @{@"width" : [NSNumber numberWithFloat:width]};
    NSDictionary *views = @{@"lineView" : lineView};
    [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[lineView]|" options: 0 metrics:metrics views:views]];
    
    switch (position) {
        case LINE_POSITION_TOP:
            [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[lineView(width)]" options: 0 metrics:metrics views:views]];
            break;
            
        case LINE_POSITION_BOTTOM:
            [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[lineView(width)]|" options: 0 metrics:metrics views:views]];
            break;
        default: break;
    }
}

Usage:个个个

[self addLine:self.textField atPosition:LINE_POSITION_TOP withColor:[UIColor darkGrayColor] lineWitdh:0.5];

Xamarin code:

 var border = new CALayer();
 nfloat width = 2;
 border.BorderColor = UIColor.Black.CGColor;
 border.Frame = new CoreGraphics.CGRect(0, textField.Frame.Size.Height - width, textField.Frame.Size.Width, textField.Frame.Size.Height);
 border.BorderWidth = width;
 textField.Layer.AddSublayer(border);
 textField.Layer.MasksToBounds = true;

Ios相关问答推荐

如果条件不满足,S从@ViewBuilder返回什么?

SWIFT AVFoundation翻转相机功能不起作用

将数据传回VC时委托为空

如何在不将应用程序留在SwiftUI上的情况下更改语言?

如何在SwiftUI中将图像整合到文本标签中间?

CIKernel的Metal Shader裁剪问题

Xcode 15中的版本控制发生了什么?

iphone 11 和 iphone 12 对于相同的布局显示不同的结果

如何从单独的视图更改修饰符的值

在 Swift 中,对象如何被准确地从内存中移除?

在 iOS 上启用明文本地流量在 .NET MAUI 中不起作用

如果使用 .onAppear 设置,为什么 SwiftUI Picker 不显示正确的选定值

在标签中显示多个计数器但在同一屏幕(Swift,IOS)

带有属性包装器的不可用属性

iPhone 6 和 6 Plus 媒体查询

如何设置imageView的圆角半径?

Watchkit AppIcon - 名为AppIcon的应用图标集没有任何适用的内容

iOS 中的 Crashlytics 不会继续通过 Fabric 应用程序中的构建您的项目

无法加载从带有标识符的包中的笔尖引用的图像

Swift:如何在设备旋转后刷新 UICollectionView 布局