ViewDidLoad 中 UITextField 的圆角只影响左角

Posted

技术标签:

【中文标题】ViewDidLoad 中 UITextField 的圆角只影响左角【英文标题】:Rounding Corners of UITextField in ViewDidLoad only affects the left corners 【发布时间】:2015-07-20 15:20:44 【问题描述】:

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

ViewDidLoad()中的结果

ViewDidAppear中的结果

问题是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)

【问题讨论】:

你是如何设置文本字段的 在 StoryBoard 中使用 AutoLayout 您是否正确设置了约束?这很可能是问题 约束一切正常,我也是这么想的,但我发现问题在于圆角 @Aladin 看看更新 【参考方案1】:

我曾经期望解决此问题的一件事是在主队列上调度

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(例如下载图像),这实际上是您应该做的。你之前在哪里调用了这个方法? 我正常调用它 我也不得不这样做,在viewWillAppear 中进行更改并没有做任何事情,并且在viewDidAppear 中加载界面后观看图像形成一个圆圈绝对俗气。感谢您提供此解决方案。【参考方案2】:

尝试将您的文本字段四舍五入代码移动到- (void)viewDidLayoutSubviews

【讨论】:

ViewDidLoad 的结果相同,请参阅更新后的问题,唯一的区别是viewDidLayoutSubviews 工作正常,如果您将设备旋转一次@Aladin 你的意思是viewWillLayoutSubviews? @阿拉丁 ViewControllers 只有viewWillLayoutSubviews 所以你的意思是这样,但不幸的是与ViewDidLoadviewDidLayoutSubviews @Aladin 相同【参考方案3】:

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

self.layer.masksToBounds = true

编辑:

尝试使用 & 代替 |,我相信它只占用了你使用 or 后的第一个角。

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

【讨论】:

你的想法和我的想法一样 :) ,我之前尝试过,但它根本没有绕过任何角落 :)) :D 啊,我没办法了,抱歉! 我被卡住了,无法弄清楚,这让我大吃一惊,但没问题,我希望有人能尽快提供帮助,感谢您的帮助 :) @David 看我有一个想法,它工作正常,检查我的答案

以上是关于ViewDidLoad 中 UITextField 的圆角只影响左角的主要内容,如果未能解决你的问题,请参考以下文章

iOS学习四之UITextField

UITextField 没有显示在视图中

如何在 uitextfield 中隐藏 UIPickerView?

Swift - UITextField

UItextfield不呈现背景颜色

UITextField点击选中文字