質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

8657閲覧

[Swift] TableViewCellの一番上に謎のマージンができる

YoheiFusayasu

総合スコア20

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/03/09 05:31

編集2016/03/10 06:23

Swift2でTableViewを書くと一番上のCellとTableHeaderViewの間に以下のようなマージンができてしまします。
イメージ説明

グレーのTableHeaderViewとピンクのCellの間の白い部分です。

このマージンはTableHeaderViewを消した場合でも存在しています。

どなたか原因を知っている方がいましたら教えていただけると幸いです。

ソースコード自体はストーリーボードからtableViewを接続してシンプルに記述しています。

swift

1import UIKit 2 3class MyPageViewController: UIViewController { 4 5 @IBOutlet weak var tableView: UITableView! 6 7 let menuList = ["プロフィールを編集する", "20Questionsに回答する", "アプリの設定", "興味カテゴリの編集"] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 tableView.delegate = self 13 tableView.dataSource = self 14 15 self.setupTableViewHeader() 16 } 17 18 override func didReceiveMemoryWarning() { 19 super.didReceiveMemoryWarning() 20 } 21 22 func setupTableViewHeader(){ 23 tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 150)) 24 } 25} 26 27/** 28 * UITableView Datasource 29 */ 30extension MyPageViewController: UITableViewDataSource { 31 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 32 return menuList.count 33 } 34 35 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 36 return UIView() 37 } 38 39 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 40 let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell") 41 42 cell.textLabel?.text = menuList[indexPath.row] 43 return cell 44 } 45 46 func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 47 return nil 48 } 49} 50 51 52/** 53 * UITableView Delegate 54 */ 55extension MyPageViewController: UITableViewDelegate { 56 func tableView(table: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) { 57 print(menuList[indexPath.row]) 58 } 59}

またsetupTableViewHeader()関数の中身を以下のように

swift

1 func setupTableViewHeader(){ 2 let headerView: MyPageHeaderView = UINib(nibName: "MyPageHeader", bundle: nil).instantiateWithOwner(self, options: nil)[0] as! MyPageHeaderView 3 headerView.bounds = CGRect(x: 0, y: 0, width: 0, height: 100) 4 tableView.tableHeaderView = headerView 5} 6

XiBから読み込む形に書き換えると
イメージ説明
のように一番うえのCellがTableHeaderViewの下に潜り込んでしまいます。

これの原因も原因がわかる方がいればご回答いただけると幸いです。

MyPageHeaderViewの詳細

swift

1class MyPageHeaderView: UIView { 2 @IBOutlet weak var profileImageView: UIImageView! 3 4 override func awakeFromNib() { 5 self.setupProfileImage() 6 } 7 8 func setupProfileImage(){ 9 profileImageView.layer.cornerRadius = 60 10 profileImageView.layer.masksToBounds = true 11 profileImageView.layer.borderColor = UIColor.redColor().CGColor 12 profileImageView.layer.borderWidth = 2 13 } 14} 15

Xibの制約
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

#謎のマージン

それはセクションヘッダなので、表示したくないなら、

swift

1func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 2 return UIView() 3}

を削除して下さい。

ついでにフッタ、nilを返しても表示されてませんか?表示したくないなら関数ごと削除しましょう。

swift

1func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 2 return nil 3}

#潜り込み

.xibから生成すると勝手にautoresizingMaskが設定されてしまうようで、これを無効にすれば潜りこまなくなると思います。headerViewの生成直後に下記のコードを追加して下さい。

swift

1headerView.autoresizingMask = [.None] //自動調整なし

逆に、コード生成して`autoresizingMask'を有効にすると、.xib生成時と同じように潜り込むと思います。

swift

1tableView.tableHeaderView!.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] //幅と高さを自動調整

投稿2016/03/09 06:26

編集2016/03/10 08:22
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YoheiFusayasu

2016/03/09 07:38 編集

ありがとうございます! 消すと無事解決できました!! しかし新たな問題が発生したので追記したのですが、こちらも見ていただけないでしょうか。。 こちらの新たな問題は解決の有無にかかわらずfuzzballさんをベストアンサーにはさせていただきます。。!
fuzzball

2016/03/09 08:14

MyPageHeaderViewクラスの中(もしくは他の場所)で、高さを指定していたりしないでしょうか?画像を見ると200くらいありそうですけど。
YoheiFusayasu

2016/03/09 08:28

高さは他の場所では全く設定していません。。 そうなんです、100と指定しているのに、100よりあきらかに大きく描画されています。 150とした場合は同様に大きくなります。 おそらく潜り込んでる部分のhight分、余計なものが出ているのだと思います。 しかしHeaderView自体に特別な操作は書いてある事以外加えておりません。。 (MyPageHeaderViewの詳細を追記しました)
fuzzball

2016/03/09 08:41

My Page Header Viewの制約に警告が出ているようですので、まずそれを直して下さい。(そこで高さを指定してるんじゃ?)
YoheiFusayasu

2016/03/10 02:59

遅れてすみません、こちらはUIを誤タップしてついてしまった警告でして、制約とは関係ありません、解除はすでにしました。 高さに関する制約は何もつけてはいない状態です。
fuzzball

2016/03/10 03:57

直接高さの制約を付けていなくても、間接的に高さに影響する場合はありますよ。何かしら制約を付けているのならその情報を出して下さい。 提示されている情報だけで再現してみると正常に表示されますので、まだ出ていない情報に原因があると思われます。
YoheiFusayasu

2016/03/10 06:21

ありがとうございます。追記で制約を記載いたしました。 制約を何も抜きにした状態などでも試してみたのですが、結果は同じでした。。
YoheiFusayasu

2016/03/10 06:23

失礼しました、画像を間違えていたので上げ直しました。
fuzzball

2016/03/10 08:23

回答に追記しました。 高さ、高さ、とうるさく言ってすみませんでしたw
YoheiFusayasu

2016/03/10 15:02

ありがとうございます。。。解決しました。。感動です。。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問