为了简单起见,我只是使用uitableviewcell而不是uiscrollview创建了一个登录屏幕,但结果却是一场灾难。
我将电池的颜色设为绿色,以便您可以清楚地看到它。以下是iPhone6 +的外观:
以下是iPhone 5的外观:
所以这里的问题是UILabel和UITextField没有得到ip6 +屏幕大小。我使用此代码来设置它们应该获得正确的屏幕尺寸
screenWidth = [[UIScreen mainScreen] bounds].size.width;
UITableViewCell *cell = [[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 44)];
UITextField *field = [[UITextField alloc] initWithFrame:cell.contentView.layer.bounds];
OR
UILabel *uiLabel = [[UILabel alloc] initWithFrame:cell.contentView.frame];
我的主要问题是,如果UIScreen无法正常工作,我们如何获得适合iphone 6+的宽度?
答案 0 :(得分:1)
UITableViewCell会将Interface Builder中xib的宽度视为其原始宽度。如果您的xib是iPhone 5(即320 x 568),那么UITableViewCell的宽度将设置为320px。如果IB中的xib是iPhone 6+(即414 x 736),则单元格的宽度将设置为414px。
要在所有设备上获得类似的观看体验,Apple建议使用Autolayout。
只需将约束赋予tableview即可。设置tableview相对于superview的约束,UITableViewCell将根据设备的屏幕大小自动调整。同时给你的UILabel约束。
否则,您需要将screenWidth作为宽度提供给单元格的内容视图和UILabel。
答案 1 :(得分:0)
好的,经过实验,这段代码解决了这个问题:
UILabel *uiLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 44)];
当天的教训:
contentView.frame和contentView.layer.bounds 不会从UITableViewCell获取正确的单元格大小。不知道为什么。
任何人都可以开导我吗?谢谢!