我使用@IBInspectable创建UIView Extension来设置拐角半径,但是当我旋转设备时
import UIKit
import Foundation
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
答案 0 :(得分:2)
通过layoutSubviews
方法设置拐角半径。
如果您需要圆形的视图,请将拐角半径设置为宽度/高度的一半。
view.layer.cornerRadius = view.frame.width / 2.0
答案 1 :(得分:1)
旋转时,视图的大小正在改变,并且以前应用的cornerRadius太大。您必须在layoutSubviews中更新拐角半径。试试这个小课程:
open class CircularView: UIView {
@IBInspectable open var hasSquareCornerRadius: Bool = false {
didSet {
update()
}
}
@IBInspectable open var cornerRadius: CGFloat = 0 {
didSet {
update()
}
}
public var normalizedCornerRadius: CGFloat {
return hasSquareCornerRadius ? bounds.height / 2 : cornerRadius
}
fileprivate func update() {
layer.cornerRadius = cornerRadius
}
override open func layoutSubviews() {
super.layoutSubviews()
update()
}
}
在接口构建器中将此类设置为您的视图。如果您的视图是正方形,请在界面构建器中将hasSquareCornerRadius设置为true。
答案 2 :(得分:1)
我可以在您的屏幕中看到,您提供了固定的拐角半径
还通过乘数提供相等的宽度或高度给超级视图,以便在旋转UIView的尺寸时得到此结果。
您需要在self.layoutSubviews()
方法中更改方向时重置视图的角半径。
答案 3 :(得分:0)
您还可以通过编程方式检查设备是水平还是垂直,然后像Lal Krishna所说的那样更改转角半径
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
if ( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) )
{
view.layer.cornerRadius = view.frame.width / 2.0
}
else if(([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) || ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft))
{
view.layer.cornerRadius = view.frame.width / 2.0
}