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
方法中舍入左角?
有什么建议吗?
* 更新 *
viewDidLayoutSubviews
与ViewDidLoad
相同
这是我用来圆角的代码
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
所以你的意思是这样,但不幸的是与ViewDidLoad
和viewDidLayoutSubviews
@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 的圆角只影响左角的主要内容,如果未能解决你的问题,请参考以下文章