[英]Set border for UIButton
我正試圖為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不會工作。
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實例目錄,你不需要強制轉換。
如果您在項目中使用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];
將按預期工作。
有關更多信息,請檢查
使用此代碼
_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=[UIColor lightGrayColor].CGColor;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.