大家都知道你不能相信UIViewController init/viewDidLoad方法的帧大小; 这个:
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
Run Code Online (Sandbox Code Playgroud)
将在许多场合打印错误的尺寸(特别是它在横向模式下几乎被打破)
这实际上将返回始终更正的结果,因此布局子视图是好的:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
Run Code Online (Sandbox Code Playgroud)
问题是每次出现视图时都会调用viewWillAppears,因此不适合分配或添加子视图.因此,您最终会 在界面中声明每个单独的视图,并最终得到我根本不喜欢的大量头文件,因为大多数项目在初始设置后不需要再进行任何操作.
所以问题是:有没有更好的方法来处理子视图定位?
问题二是非常相关的,假设我有一个UIView的子类,包括其他各种子视图.我在我的界面中声明它,并在我的init/viewDidLoad方法中分配/初始化它.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
Run Code Online (Sandbox Code Playgroud)
正如我们已经知道的那样,我们现在需要在viewWillAppear中重新定位它以获得更准确的读数
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
Run Code Online (Sandbox Code Playgroud)
问题是当然所有子视图也需要重新定位.这是由自动调用的layoutSubviews函数完成的,但是我们遇到了同样的问题:所有子视图都需要在SNKSlidingMenu类的接口内声明.有没有办法解决这个问题?
谢谢.
我有一个UILabel,他的文字大小有属性
title.adjustsFontSizeToFitWidth = YES;
Run Code Online (Sandbox Code Playgroud)
这阻止我使用标准方法来调整UILabel的大小.我在这里读到另一篇文章,我应该使用这个功能
sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode
Run Code Online (Sandbox Code Playgroud)
从这个答案:当-adjustsFontSizeToFitWidth设置为YES时,如何计算UILabel的字体大小?
现在,我无法弄清楚如何使它工作..这是实际的代码
UIFont *font = [UIFont fontWithName:@"Marker Felt" size:200];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 20.0)];
title.text = @"this is a long title that should be resized";
title.font = font;
title.numberOfLines = 1;
title.adjustsFontSizeToFitWidth = YES;
CGFloat pointSize = 0.0;
CGSize size = [title.text sizeWithFont:font
minFontSize:title.minimumFontSize
actualFontSize:&pointSize
forWidth:width
lineBreakMode:title.lineBreakMode];
title.frame = CGRectMake(title.frame.origin.x,
title.frame.origin.y,
size.width,
size.height);
Run Code Online (Sandbox Code Playgroud)
UILabel错误地调整了大小,好像字体大小仍然是200 ..任何线索?谢谢!