2015-07-21 60 views
67

這不是問題,而是我遇到的問題的解決方案。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; 
} 

希望對他人有幫助。

+0

[有同樣的問題](http://stackoverflow.com/questions/31537196/ios-9-uitableview-separators-significant-left-margin) –

+0

是的,這對我來說非常適合我,尤其是在iOS 9的iPad上 –

+0

我剛剛遇到了一個嚴重的問題,它使用的版本是'NSFoundationVersionNumber_iOS_8_1',它需要使用'NSFoundationVersionNumber_iOS_8_4',否則會崩潰運行iOS8.2和iOS8.3的應用程序和IOS8.4我使用的IOS8.4 – Alex

回答

13

完美的解決方案的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 
    } 
    } 
+1

這不適合我。這就是爲什麼我不得不尋找其他方法。 – stuti

+1

這不適用於iOS 9.您是否已使用iOS 9和Xcode 7在首選項中正確設置了命令行工具來測試它? –

+0

沒有。這對我不起作用。 –

38

爲iOS 9和上述

這是因爲最佳解決方案一個新的featu重新稱爲可讀內容指南。它提供適合閱讀的利潤率。所以,在iPhone和縱向iPad中,它們的利潤率非常小,但在橫向iPad上它們更大。在iOS 9中,UITableView的單元邊距默認爲遵循可讀內容指南。

如果您想停止該操作,只需將tableView的cellLayoutMarginsFollowReadableWidth設置爲NO/false即可。

來源:https://forums.developer.apple.com/thread/5496

+2

非常好的答案!遺憾的是,它尚未記錄。這個問題發生在我準備[我](http://stackoverflow.com/questions/31537196/ios-9-uitableview-separators-insets-significant-left-margin/) –

3

有點晚。我希望是別人有幫助...

if #available(iOS 9.0, *) { 
     myTableView.cellLayoutMarginsFollowReadableWidth = false 
} 
0

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