UITextField在屏幕上绘制了两次

时间:2019-03-04 17:55:31

标签: ios swift uitextfield uikit

我正在以编程方式将UITextField添加到Horizo​​ntal UIStackView(位于Vertical UIStackView内部)中,但是同时显示了圆角和尖角。

我认为问题在于UITextField被绘制了两次,首先是默认外观,然后是我添加到其图层的自定义外观。

UITextField看起来像这样

UITextField

如果仔细观察,您会发现尖角颜色是默认颜色,而边框的其余部分则更深。

我用来修改其外观的代码如下

myTextField.layer.borderWidth = 1.0
myTextField.layer.cornerRadius = 6.0    
myTextField.layer.borderColor = UIColor.darkGray.cgColor

我想我缺少了一些东西,但是我不确定。你有什么想法吗?

预先感谢

编辑

在这些代码行之前,我调用不带此类参数的UITextField初始化程序

myTextField = UITextField()

编辑2 这是与TextField相关的整个代码

myTextField.layer.borderWidth = 1.0
myTextField.layer.cornerRadius = 6.0
myTextField.clipsToBounds = true

myTextField.layer.borderColor = UIColor.darkGray.cgColor

myTextField.isUserInteractionEnabled = false

// Create the constraints
constraints.append(NSLayoutConstraint(item: horizontalStackView, attribute: .width, relatedBy: .equal, toItem: verticalStackView, attribute: .width, multiplier: 1.0, constant: 0.0))

// Add the components to the Horizontal Stack View
horizontalStackView.addArrangedSubview(myTextField)
horizontalStackView.addArrangedSubview(myStepper) // A stepper that resides next to the conflicting TextField
verticalStackView.addArrangedSubview(horizontalStackView)

3 个答案:

答案 0 :(得分:1)

尝试像这样将子视图添加到堆栈视图中。

let stackView = UIStackView(arrangedSubviews: [myTextView, myStepper])
stackView.axis = .vertical
stackView.distribution = .fillEqually

还添加

stackView.translatesAutoresizingMaskIntoConstraints = false

也许您在两个stackview中的约束都有些时髦

答案 1 :(得分:0)

您可能需要

myTextField.clipsToBounds = true

答案 2 :(得分:0)

我尝试了Sh_Khan解决方案,该解决方案有效,但是在阅读了注释之后,我决定尝试其他解决方案,因此不会降低性能。在注释了这一行代码(clipToBounds一个)并再次运行该应用程序之后,角落没有出现。

我完全肯定,除了添加该行,运行该应用程序然后将同一行注释掉之外,没有其他更改。

我不太确定问题(甚至解决方案)是什么。也许我要做的就是清理构建文件夹(Product -> Clean Build Folder),但这对我来说没有意义。