我正在尝试将我的应用程序转换为Swift语言.
我有这行代码:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:textDictionary
forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
如何将其转换为Swift?
在Apple的文档中,没有这样的方法.
我有一个多个视图控制器,我想将所有字体颜色设置为红色.
[[UINavigationBar appearance] setFont:[UIFont boldSystemFontOfSize:12.0]];
Run Code Online (Sandbox Code Playgroud)
抛出一个无法识别的选择器错误.
请提供代码,以帮助解决以下问题.
Apple文档说明:
要参与外观代理API,请使用UI_APPEARANCE_SELECTOR在标头中标记外观属性选择器.
在Objective-C中,可以使用以下方法注释属性UI_APPEARANCE_SELECTOR:
@property (nonatomic, strong) UIColor *foregroundColor UI_APPEARANCE_SELECTOR;
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Swift中做同样的事情?
我陷入了最令人沮丧的困境.我上下研究过,可以清楚地看到Apple不希望我们篡改iOS 7.好吧,我想篡改.而且,Mailbox的团队清楚地知道如何做到这一点并获得批准.
我想要实现的主要是将标签颜色更改为白色.

我的第一个想法是他们使用的是模仿UIDatePicker的自定义UIPickerView,但我不认为是这种情况.
我放大了一个小片段,发现了正常UIDatePicker(黑线)的残余以及字母"W"上的剪辑.

现在我已经高高低调了.做了一些运行时黑客攻击,与UIAppearance混淆,甚至挖到一些私有API只是为了看看这是否可行.
我接近,非常接近,但它使用了私有API,如果你滚动得足够快,标签会再次变黑.
如果没有a)违反规则或b)花费无数小时重新实现UIDatePicker,我完全不知道如何做到这一点.
邮箱,告诉我你的秘密!如果其他人有任何建议(我的意思是任何建议),请告诉我.
此外,这是我得到的最接近的:

在尝试将UIAppearance代理样式应用于UILabel类代理时,我得到了不可靠的结果.例如,以下工作正如我所期望的那样:
[[UILabel appearance] setFont:[UIFont fontWithName:SOME_FONT size:SOME_SIZE]];
[[UILabel appearance] setShadowColor:[UIColor blackColor]];
Run Code Online (Sandbox Code Playgroud)
但是,设置textColor不起作用:
[[UILabel appearance] setColor:[UIColor greenColor]];
Run Code Online (Sandbox Code Playgroud)
确实有效.有点.它有点不可靠,导致任何特定于实例的调用setTextColor:被忽略.
将UIAppearance样式应用于UILabel的正确方法是什么?
我正在使用UIAppearance将字体应用于UINavigationBar和UIBarButtonItem,我遇到了问题.我运行了这段代码:
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil]
setTitleTextAttributes:
@{NSFontAttributeName : [UIFont fontWithName:@"My_Font" size:17.0]}
forState:UIControlStateNormal];
NSLog(@"%@", [[UIBarButtonItem appearanceWhenContainedIn:
[UIToolbar class], nil] titleTextAttributesForState:UIControlStateNormal]);
Run Code Online (Sandbox Code Playgroud)
并且iOS 7上的日志结果是:
(null)
Run Code Online (Sandbox Code Playgroud)
iOS 6中的结果是:
{
NSFont = "<UICFFont: 0x1d897a80> font-family: \"My_Font\"; font-weight: normal; font-style: normal; font-size: 17px";
}
Run Code Online (Sandbox Code Playgroud)
我在iOS 7文档中找不到任何表明这不起作用的内容,有其他人有这个问题吗?
编辑1
我实际上已经解决了[UINavigationBar appearance]这个问题,我将点大小设置为0,以便将字体设置为默认的navbar/barButtonItem大小,如NSString UIKit Additions Reference中所述,但这显然不再适用于iOS 7.相反,将磅值设置为0将返回系统字体.
我仍然无法设置titleTextAttributes到
[UIBarButtonItem appearanceWhenContaintedIn:[UIToolbar class], nil]]
我正在尝试自定义以下分段控件,第一个按钮使用左图像,第二个按钮使用右图像.我怎么用UIAppearance做到这一点?
我想更改以下segmentedControl:

类似下面的东西:

我想使用自定义图像的原因是我可以更改按钮的角落.如果你看一下蓝色分段控制,它会更加平方(我的图像有它自己的角落).
我在考虑这样的事情,但没有用:
UIImage *leftImage = [[UIImage imageNamed:@"leftControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
UIImage *rightImage = [[UIImage imageNamed:@"rightControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
[[UISegmentedControl appearance] setBackgroundImage:leftImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault ];
[[UISegmentedControl appearance] setBackgroundImage:rightImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
如何在不更改文本颜色的情况下更改iOS7中分段控制器的边框颜色?
如果我可以按原样保持线段之间的线(即与文本颜色相同),那将是理想的,但如果边框颜色更改意味着更改此线,那么也可以.
另请注意,文本(以及段之间的线条)具有设置的颜色 [segmCtrl setTintColor:choosenTintColor]
这既是一个问题,也是一个部分解决方案.
*示例项目:
https://github.com/JosephLin/TransitionTest
使用时,过渡动画开始时,不会显示transitionFromViewController:...由toViewControllers 完成的布局viewWillAppear:.换句话说,预布局视图在动画期间显示,并且其内容在动画之后捕捉到布局后位置.
如果我自定义导航栏的背景UIBarButtonItem,则条形按钮会在动画播放前显示错误的大小/位置,并在动画结束时捕捉到正确的大小/位置,类似于问题1.
为了演示这个问题,我做了一个裸骨的自定义容器控制器来执行一些自定义视图转换.它几乎是一个UINavigationController副本,它在视图之间进行交叉消解而不是推送动画.
'Push'方法如下所示:
- (void)pushController:(UIViewController *)toViewController
{
UIViewController *fromViewController = [self.childViewControllers lastObject];
[self addChildViewController:toViewController];
toViewController.view.frame = self.view.bounds;
NSLog(@"Before transitionFromViewController:");
[self transitionFromViewController:fromViewController
toViewController:toViewController
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{}
completion:^(BOOL finished) {
[toViewController didMoveToParentViewController:self];
}];
}
Run Code Online (Sandbox Code Playgroud)
现在,DetailViewController(我正在推动的视图控制器)需要布局其内容viewWillAppear:.它无法进行,viewDidLoad因为它当时没有正确的帧.
出于演示的目的,DetailViewController将其标签在不同的位置和颜色viewDidLoad,viewWillAppear以及viewDidAppear:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%s", __PRETTY_FUNCTION__);
CGRect rect = self.descriptionLabel.frame;
rect.origin.y = 50;
self.descriptionLabel.frame …Run Code Online (Sandbox Code Playgroud) 我想检测的iOS 6特定外观的方法,通过运行respondsToSelector在[UIBarButtonItem appearance].但是,NO无论我指定哪个选择器,它总是为我返回:
// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE");
// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE");
Run Code Online (Sandbox Code Playgroud)
实际上使用这些方法在他们各自的iOS版本上工作正常,但我似乎无法检测到哪一个可供我使用.那我该怎么做呢?
uiappearance ×10
ios ×7
ios5 ×3
uikit ×3
ios7 ×2
swift ×2
xcode ×2
cocoa-touch ×1
ios6 ×1
iphone ×1
objective-c ×1
uidatepicker ×1
uilabel ×1
uipickerview ×1