【问题标题】:Rounding Corners of UITextField in ViewDidLoad only affects the left cornersViewDidLoad 中 UITextField 的圆角只影响左角
【发布时间】: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 看看更新

标签: ios swift autolayout uitextfield viewdidload


【解决方案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
  • 看我有一个想法,它工作正常,检查我的答案
猜你喜欢
  • 2017-11-12
  • 2018-05-27
  • 2015-08-23
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
相关资源
最近更新 更多