Xcode 7 iOS 9 UITableViewCell分隔符插入问题
这不是问题,而是我遇到的问题的解决方案。Xcode 7 iOS 9 UITableViewCell分隔符插入问题
在Xcode 7中,当应用程序在iPad设备上的iOS 9上运行时,UITableView单元格会在tableview的左侧留下一些空白。将设备旋转到风景会增加边距。
我找到的解决方案是:
设置 “cellLayoutMarginsFollowReadableWidth” 为NO。
self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
因为,这个属性仅在iOS版9可用,因此,您将不得不把一个条件检查的iOS版本,否则会崩溃。
if(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1)
{
self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
}
希望对他人有帮助。
完美的解决方案的iOS高达9
在viewDidLoad中
目标C
- (void)viewDidLoad {
[super viewDidLoad];
//Required for iOS 9
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) {
self.testTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
}
夫特
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 9.0, *) {
tableViewDiet.cellLayoutMarginsFollowReadableWidth = false
}
}
在TableViewDelegate方法添加以下代码:
目标C
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
夫特
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
// Remove seperator inset
if cell.respondsToSelector(Selector("setSeparatorInset:")) {
cell.separatorInset = UIEdgeInsetsZero
}
// Prevent the cell from inheriting the Table View's margin settings
if cell.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:")) {
cell.preservesSuperviewLayoutMargins = false
}
// Explictly set your cell's layout margins
if cell.respondsToSelector(Selector("setLayoutMargins:")) {
cell.layoutMargins = UIEdgeInsetsZero
}
}
这不适合我。这就是为什么我不得不寻找其他方法。 – stuti
这不适用于iOS 9.您是否已使用iOS 9和Xcode 7在首选项中正确设置了命令行工具来测试它? –
没有。这对我不起作用。 –
为iOS 9和上述
这是因为最佳解决方案一个新的featu重新称为可读内容指南。它提供适合阅读的利润率。所以,在iPhone和纵向iPad中,它们的利润率非常小,但在横向iPad上它们更大。在iOS 9中,UITableView的单元边距默认为遵循可读内容指南。
如果您想停止该操作,只需将tableView的cellLayoutMarginsFollowReadableWidth
设置为NO/false
即可。
非常好的答案!遗憾的是,它尚未记录。这个问题发生在我准备[我](http://stackoverflow.com/questions/31537196/ios-9-uitableview-separators-insets-significant-left-margin/) –
有点晚。我希望是别人有帮助...
if #available(iOS 9.0, *) {
myTableView.cellLayoutMarginsFollowReadableWidth = false
}
readableContentGuide
是已经加入到每UIView
这是为了保证用户不必把他的头读取布局指南内容。
如果你想跟着可读的内容指南,然后执行以下操作:
let baseSection = UIView()
contentView.addSubview(baseSection)
baseSection.translatesAutoresizingMaskIntoConstraints = false
let insets = UIEdgeInsets(top: 4, left: 0, bottom: 4, right: 0)
baseSection.leadingAnchor.constraint(equalTo: readableContentGuide.leadingAnchor, constant: insets.left).isActive = true
baseSection.trailingAnchor.constraint(equalTo: readableContentGuide.trailingAnchor, constant: -insets.right).isActive = true
baseSection.topAnchor.constraint(equalTo: contentView.topAnchor, constant: insets.top).isActive = true
baseSection.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -insets.bottom).isActive = true
注:在底部和顶部锚上面的代码中使用的内容查看,而不是readableContentGuide
使得内容垂直利润率变化基于tableView.rowHeight
。
[有同样的问题](http://stackoverflow.com/questions/31537196/ios-9-uitableview-separators-significant-left-margin) –
是的,这对我来说非常适合我,尤其是在iOS 9的iPad上 –
我刚刚遇到了一个严重的问题,它使用的版本是'NSFoundationVersionNumber_iOS_8_1',它需要使用'NSFoundationVersionNumber_iOS_8_4',否则会崩溃运行iOS8.2和iOS8.3的应用程序和IOS8.4我使用的IOS8.4 – Alex