これは質問ではなく、私が直面した問題の解決策です。
Xcode 7では、iPadデバイス上のiOS 9でアプリケーションを実行すると、UITableViewセルはテーブルビューの左側にマージンを残します。また、デバイスを横向きに回転させると、マージンが増加します。
私が見つけた解決策は次のとおりです。
「cellLayoutMarginsFollowReadableWidth」をNOに設定します。
self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
このプロパティはiOS 9でのみ使用できるため、iOSバージョンを確認する条件を設定する必要があります。そうしないとクラッシュします。
if(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_8_1)
{
self.tbl_Name.cellLayoutMarginsFollowReadableWidth = NO;
}
それが他の人に役立つことを願っています。
iOS 9以降に最適なソリューション
これは、読み取り可能なコンテンツガイドと呼ばれる新しい機能によるものです。読み取りに適したマージンを提供します。そのため、iPhoneおよびポートレートiPadでは、これらは非常に小さなマージンですが、ランドスケープiPadでは、それらは大きくなります。 iOS 9では、UITableViewのセルマージンはデフォルトで読み取り可能なコンテンツガイドに従っています。
それを止めたい場合は、tableViewのcellLayoutMarginsFollowReadableWidth
をNO/false
に設定するだけです。
iOS 9までの完璧なソリューション
viewDidLoad
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
//Required for iOS 9
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) {
self.testTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
}
Swift
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 9.0, *) {
tableViewDiet.cellLayoutMarginsFollowReadableWidth = false
}
}
TableViewDelegateメソッドで次のコードを追加します:
Objective-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];
}
}
Swift
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
}
}
少し遅れて。私は他の誰かに役立つことを願っています...
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
の代わりにcontentViewを使用し、コンテンツの垂直マージンがtableView.rowHeight
に基づいて変化するようにします。