我正在尝试为UIButton保留边框。如果我使用以下代码,它就可以正常工作。
案例:1
[[_myButton layer] setBorderWidth:1.0f];
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor];
但在我写作之前:
self.baseTypeButton.layer.borderWidth=2.0f;
self.myButton.layer.borderColor=[UIColor lightGrayColor];
XCode建议我做
现在我的代码发生了变化,但在这种情况下我没能设置边框:
案例:2
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]);
我没有使用自动布局。任何人都可以解释case-1和case-2之间的区别。为什么案例2不会起作用。
答案 0 :(得分:7)
layer.borderColor必须是CGColor,因此下面的代码可以使用。
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=[ UIColor lightGrayColor ].CGColor;
您的代码
[UIColor lightGrayColor]
返回一个UIColor实例,而不是一个CGColor实例。并且UIColor无法与CGColor联系,所以你的演员阵容
(__bridge CGColorRef _Nullable)
返回意外结果。
使用此代码可以看到奇怪的结果
NSLog( @"%@", (__bridge CGColorRef _Nullable)([UIColor lightGrayColor]) );
返回下方。 (Xcode 7.3)
2016-04-06 15:30:51.415 36442877[8570:2643221] UIDeviceWhiteColorSpace 0.666667 1
如果您提供borderColor CGColor实例目录,则不需要进行转换。
答案 1 :(得分:1)
如果您在项目中使用ARC而不是
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]);
无法正常工作,因为__bridge CGColorRef _Nullable
会自动释放引用。当调用CFRelease()时,对象就会消失并指向任何内容。
和
[[_myButton layer] setBorderWidth:1.0f];
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor];
将按预期工作。
有关详细信息,请查看:
答案 2 :(得分:0)
使用此代码
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=[UIColor lightGrayColor].CGColor;