在ViewDidLoad中设置UITextField的圆角只影响左侧圆角。

4

我正在尝试将两个 UITextField 的顶部和底部边框圆角化。

ViewDidLoad() 中的结果

ViewDidLoad Result

ViewDidAppear 中的结果

ViewDidAppear Result

问题在于 ViewDidAppear 方法会在加载视图后半秒钟才更改边框,这在我的情况下不好。

有人知道为什么只有在 ViewDidLoad 方法中左侧角落变成了圆角吗?

欢迎任何建议。

* 更新 *

viewDidLayoutSubviewsViewDidLoad 相同。

以下是我用于设置圆角的代码:

extension UITextField {
    func roundCorners(corners:UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        self.layer.masksToBounds = true
        self.layer.mask = mask
    }
}

并且,
self.FirstTextField.roundCorners(UIRectCorner.TopRight | UIRectCorner.TopLeft, radius: 10.0)
self.SecondTextField.roundCorners(UIRectCorner.BottomLeft | UIRectCorner.BottomRight, radius: 10.0)

你是如何设置文本字段的? - Alaeddine
在Storyboard中使用AutoLayout - Amr Mohamed
你是否正确设置了约束条件?那很可能是问题所在。 - David Cao
约束条件都没问题,我也是这么想的,但是我发现问题在于圆角的四舍五入。 - Amr Mohamed
@Aladin,请看一下更新。 - Amr Mohamed
@Panda请检查我的答案。 - Alaeddine
3个回答

5

我曾期望解决这个问题的唯一方法是在主队列上调度任务。

dispatch_async(dispatch_get_main_queue(),{
      self.FirstTextField.roundCorners(UIRectCorner.TopRight | UIRectCorner.TopLeft, radius: 10.0)
      self.SecondTextField.roundCorners(UIRectCorner.BottomLeft | UIRectCorner.BottomRight, radius: 10.0)
});

我不知道这种方法是否有效率,但它确实可以运行 :D

如果有更好的答案,请发表出来 :)


这实际上是您需要在主线程以外的其他地方更新UI时应该执行的操作(例如,下载图片)。您之前在哪里调用该方法? - David Cao
我正常地在调用它。 - Amr Mohamed
我也不得不这样做,对viewWillAppear进行的更改没有任何效果,在viewDidAppear中加载界面后观察图像变成圆形实在是俗气。感谢您提供的解决方案。 - Hobbyist

1
尝试将文本字段舍入的代码移至 - (void) viewDidLayoutSubviews 中。

ViewDidLoad 相同的结果,请查看更新的问题,唯一的区别是如果您旋转设备,则 viewDidLayoutSubviews 可以正常工作。@Aladin - Amr Mohamed
1
你是指 viewWillLayoutSubviews 吗?@Aladin - Amr Mohamed
ViewControllers只有viewWillLayoutSubviews,所以你是指它,但不幸的是和ViewDidLoad以及viewDidLayoutSubviews一样。@Aladin - Amr Mohamed

0

你需要将图层蒙版设置为其边界

self.layer.masksToBounds = true

编辑:

尝试使用 & 而不是 |,因为你使用了或运算符,我相信它只会取第一个角落。

self.FirstTextField.roundCorners(UIRectCorner.TopRight & UIRectCorner.TopLeft, radius: 10.0)
self.SecondTextField.roundCorners(UIRectCorner.BottomLeft & UIRectCorner.BottomRight, radius: 10.0)

你和我想的一样 :) ,我之前尝试过这个,但是它根本没有圆角 :)) :D - Amr Mohamed
啊,我现在没有更多的想法了,抱歉! - David Cao
我也卡住了,想不出来,这真是让我头疼,但没关系,希望很快会有人帮忙,感谢你的尝试帮助 :) @David - Amr Mohamed
看,我有一个想法,它运行得很好,请查看我的答案。 - Amr Mohamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接