如何在iOS中通过代码实现指定样式的文本框视图?
纯代码实现带边框的卡片式订单详情视图
你的现有代码存在几个核心问题:创建的viewTitle和descriptionLabel未添加到视图层级中,也没有设置任何布局约束,同时完全没实现卡片的样式效果。下面是完整的实现代码,包含卡片视图、正确布局和样式:
class SecondViewController: UIViewController { var items: ItemInfo! override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white // 创建页面主标题 let viewTitle: UILabel = { let vt = UILabel() vt.translatesAutoresizingMaskIntoConstraints = false vt.text = "View Order Details" vt.textColor = .black vt.font = UIFont.boldSystemFont(ofSize: 28) return vt }() // 创建卡片容器视图 let cardView: UIView = { let view = UIView() view.translatesAutoresizingMaskIntoConstraints = false // 设置卡片样式:边框、圆角、阴影 view.layer.borderWidth = 1 view.layer.borderColor = UIColor.lightGray.cgColor view.layer.cornerRadius = 8 view.layer.shadowColor = UIColor.black.cgColor view.layer.shadowOffset = CGSize(width: 0, height: 2) view.layer.shadowOpacity = 0.1 view.layer.shadowRadius = 4 view.backgroundColor = .white return view }() // 订单信息标签(用UILabel替代UITextView,避免默认内边距问题) let orderInfoLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.text = "Order Date: Sep 11, 2022 Order # 114 Order total $57.81" label.font = UIFont.systemFont(ofSize: 18) label.numberOfLines = 0 // 允许文本自动换行 return label }() // 将控件添加到视图层级 view.addSubview(viewTitle) view.addSubview(cardView) cardView.addSubview(orderInfoLabel) // 设置Auto Layout约束 NSLayoutConstraint.activate([ // 主标题约束:顶部距安全区20,水平居中 viewTitle.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20), viewTitle.centerXAnchor.constraint(equalTo: view.centerXAnchor), // 卡片视图约束:顶部距标题20,左右距屏幕16,底部距安全区至少20 cardView.topAnchor.constraint(equalTo: viewTitle.bottomAnchor, constant: 20), cardView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), cardView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), cardView.bottomAnchor.constraint(lessThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20), // 订单信息标签约束:距卡片四边各16的内边距 orderInfoLabel.topAnchor.constraint(equalTo: cardView.topAnchor, constant: 16), orderInfoLabel.leadingAnchor.constraint(equalTo: cardView.leadingAnchor, constant: 16), orderInfoLabel.trailingAnchor.constraint(equalTo: cardView.trailingAnchor, constant: -16), orderInfoLabel.bottomAnchor.constraint(equalTo: cardView.bottomAnchor, constant: -16) ]) } }
关键细节说明:
- 卡片视图实现:用普通
UIView作为容器,通过layer属性设置边框宽度、颜色、圆角,搭配阴影效果模拟卡片质感。 - 控件层级:把订单信息标签嵌套在卡片视图内部,保证视觉上属于卡片的一部分。
- 布局适配:使用Auto Layout设置所有控件的位置和尺寸,适配不同屏幕尺寸。
- 替换UITextView:UITextView默认带有内边距和滚动特性,对于固定展示的订单信息,UILabel更简洁,设置
numberOfLines = 0可支持自动换行。
如果需要扩展卡片内容(比如添加多行订单条目),可以在卡片视图中加入UITableView或多个标签来实现。
内容的提问来源于stack exchange,提问作者Swayam Shah
相关产品推荐
相关产品推荐

