应用程序可以选择通过用户动态更改字体大小,例如14,17,20,23。
当用户更改动态字体大小时,我们需要根据视图的新高度更改所有视图位置。 这是正确的方法吗?
答案 0 :(得分:2)
你不能一次改变所有字体....
但是我找到了一个很适合我的变量,也会帮助你......
我已经做了一些递归功能,你可以帮助你..
按照以下步骤进行..
首先创建一个从UIViewController扩展的类(BaseViewController),如在BaseViewController.h文件中
@interface BaseViewController : UIViewController
在BaseViewController.m文件中编写以下代码。
-(void)changeFontsOfViewController:(CGFloat)size
{
UIViewController * vv = [self viewControllerOfView:self.view];
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([vv class]) owner:vv options:nil];
for (id object in objects)
{
[self changeFontOfView:object withSize:size];
}
}
-(void)changeFontOfView:(UIView *)aView withSize:(CGFloat)size
{
for (UIView *vv in [aView subviews])
{
if ([vv isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)vv;
btn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:fontSize];
}
else if ([vv isKindOfClass:[UILabel class]])
{
UILabel *lbl = (UILabel *)vv;
[lbl setFont:[UIFont fontWithName:@"Helvetica-Bold" size:fontSize]];
}
else if ([vv isKindOfClass:[UITextView class]])
{
UITextView *txt = (UITextView *)vv;
[txt setFont:[UIFont fontWithName:@"Helvetica-Bold" size:fontSize]];
}
else if ([vv isKindOfClass:[UITextField class]])
{
UITextField *txt = (UITextField *)vv;
[txt setFont:[UIFont fontWithName:@"Helvetica-Bold" size:fontSize]];
}
else if ([vv isKindOfClass:[UIView class]]||[vv isKindOfClass:[UIScrollView class]])
{
if (aView.subviews.count == 0)return;
[self changeFontOfView:vv withSize:size];
}
}
}
现在你的每个viewController(RootViewController)都会像在RootViewController.h中一样从BaseViewController类扩展。
#import "BaseViewController.h"
@interface RootViewController : BaseViewController
{
}
如果您想更改字体大小,请致电changeFontOfView:withSize:
,如...
[self changeFontsOfViewController:14];
请仔细按照上述步骤进行摇滚.......
答案 1 :(得分:0)
我没有这样做,但这就是我要做的事情:
确保您有一个负责处理所有数据的课程,您可以从项目的所有位置访问该课程(通常我的dataControllers
是从AppDelegate
引用的)。
然后你创建一个包含不同可切换字体大小的属性(如果你想通过名字而不是数字来调用你的字体大小,则提示C typedef enum
。)
当你这样做时,你可能想要创建多个属性,因为你可能有标题和副标题而不是所有的东西都应该有相同的字体大小吗?
现在您希望在更改此值时更改每个相关的UIControl
?如果您想这样做,我强烈建议您使用key-value-observer,因为它会在您更改值后为您完成所有工作。