簡體   English   中英

為UIButton設置邊框

[英]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];

將按預期工作。

有關更多信息,請檢查

ARC和橋接演員

使用此代碼

_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=[UIColor lightGrayColor].CGColor;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM