尝试将UIAppearance代理样式应用于UILabel类代理时,我得到的结果不可靠。例如,以下工作正如我所料:
[[UILabel appearance] setFont:[UIFont fontWithName:SOME_FONT size:SOME_SIZE]];
[[UILabel appearance] setShadowColor:[UIColor blackColor]];
设置textColor不起作用,但是:
[[UILabel appearance] setColor:[UIColor greenColor]];
确实有效。 种。它有点不可靠,导致忽略setTextColor:
的任何特定于实例的调用。
将UIAppearance样式应用于UILabel的正确方法是什么?
答案 0 :(得分:53)
好的,事实证明你无法使用UIAppearance
代理设置任何UILabel属性。
虽然UILabel
类符合UIAppearanceContainer
协议,但对UILabel.h的检查显示其属性均未标记为UI_APPEARANCE_SELECTOR
,这是使用{UIAppearance
的先决条件。 1}}。
开溜。
答案 1 :(得分:1)
我已经将UILabel
分类@interface SmallLabel : UILabel
@end
@implementation SmallLabel
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
@end
然后我使用appearanceWhenContainedIn:
UIFont *smallFont = [UIFont fontWithName:@"Arial" size:15];
[[SmallLabel appearanceWhenContainedIn:[UIView class], nil] setFont:smallFont];
这适用于我的应用中所有SmallLabel的所需字体。我只需要在XCode Identity Inspector中将Custom Class设置为SmallLabel。它似乎不适用于以编程方式创建的标签,仅适用于NIB中的标签。
进一步测试后,此方法并不总是可靠地运行。
答案 2 :(得分:1)
在Swift中,您可以在UITableViewHeaderFooterView中包含自定义UILabel的外观属性:
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 18)
UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).textColor = .white
当您在以下位置使用UITableViewHeaderFooterView时,这将适用于textLabel属性:
public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: headerViewId)
if headerView == nil {
headerView = UITableViewHeaderFooterView(reuseIdentifier: headerViewId)
}
headerView?.textLabel?.text = "My Header".uppercased()
return headerView
}
这在使用UITableViewStyle.grouped时非常有用,因为即使您在viewForHeaderInSection中自定义UITableViewHeaderFooterView.textLabel,这些节头视图似乎也会被默认样式覆盖
答案 3 :(得分:0)
以下代码使用swift 2.2和iOS 9.0为我工作
let textFieldInsideSearchBar = self.searchBar?.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = BCGConstants.Colors.darkBluishPurpleColor()
let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.valueForKey("placeholderLabel") as? UILabel
textFieldInsideSearchBarLabel?.textColor = UIColor(red: 220/255, green: 209/255, blue: 231/255, alpha: 1.0)`enter code here`