UItableviewcell表现不佳,他们只能通过iphone 6正确获得屏幕宽度。(objc)

时间:2014-12-28 22:06:15

标签: ios objective-c iphone uitableview

为了简单起见,我只是使用uitableviewcell而不是uiscrollview创建了一个登录屏幕,但结果却是一场灾难。

我将电池的颜色设为绿色,以便您可以清楚地看到它。以下是iPhone6 +的外观: enter image description here

以下是iPhone 5的外观: enter image description here

所以这里的问题是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+的宽度?

2 个答案:

答案 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获取正确的单元格大小。不知道为什么。

任何人都可以开导我吗?谢谢!