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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1783閲覧

テーブルビュー2段プロジェクト⇒10 sectionタイトルが消えてしまった(Version 8.0 (8A218a)になったら)

Tomzy

総合スコア104

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

2グッド

0クリップ

投稿2016/10/11 05:14

編集2016/10/13 01:34

###質問の要旨

teratailで教えて頂き、やっとsectionタイトルが表示されましたが、最近Xcode7を開こうとしたら、強制的にVersion 8.0 (8A218a)にバージョンアップさせられました。3.0と2.3いずれかを選ぶことができましたので、大きな変更を望まない現在、2.3を選びました。

しかし、ビルドをしましたら、タブ1とタブ2の第1画面に設定していた青色のセクションタイトルが消えていました。以前と消えたあとのスクリーンショットを2枚添付します。

Swift3になったときのコードルールに関係がありそうですが、具体的にどこの部分が影響しているのかを教えて頂ければ幸いです。

イメージ説明
イメージ説明

###関係していると思われるコード

第1画面のファイルView Controllerの下記コードが関係していると思われます。

//セクション毎のセル数を指定するメソッド func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { return 0 } if section == 1 { return label2Array1.count } else if section == 2 { return label2Array2.count } else { return 0 } } //sectionの設定とタイトル記載 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let header = UILabel(frame: CGRectMake(0, 300, 200, 80)) if(section == 0){ header.text = "ご希望の項目を触ってください" header.textAlignment = NSTextAlignment.Center header.backgroundColor = UIColor.redColor() header.textColor = UIColor.whiteColor() header.font = UIFont.boldSystemFontOfSize(18) } if(section == 1){ header.text = "動画による説明" //文字位置 header.textAlignment = NSTextAlignment.Center header.backgroundColor = UIColor.blueColor() //header.backgroundColor = UIColor(red: 255/255, green: 158/255, blue: 35/255, alpha: 1.0) header.textColor = UIColor.whiteColor() header.font = UIFont.boldSystemFontOfSize(22) //return header } if(section == 2){ header.text = "テキストによる説明" header.textAlignment = NSTextAlignment.Center header.backgroundColor = UIColor.blueColor() //header.backgroundColor = UIColor(red: 255/255, green: 158/255, blue: 35/255, alpha: 1.0) header.textColor = UIColor.whiteColor() header.font = UIFont.boldSystemFontOfSize(22) } return header }

###ウェブサイトで見つけたsectionに関するSwift3変更コード
リンク内容

関数の第1引数のラベルがない場合、_ を付ける?


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

###試みた修正

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
の一行目にアンダーバーを入れてみましたが、変わりませんでした。
↓ ↓ ↓
func tableView(_tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

###ご参考:制作環境
iMac27 OS10.11.6(15G1004)
Xcode Version 8.0 (8A218a)

fuzzball, ikuwow👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

の一行目にアンダーバーを入れてみましたが、変わりませんでした。
↓ ↓ ↓
func tableView(_tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

アンダーバーとtableViewの間にはスペースが必要です。スペースを空けて再度試してみて下さい。

投稿2016/10/11 05:23

編集2016/10/11 05:24
fuzzball

総合スコア16731

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

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

Tomzy

2016/10/11 06:13

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { のごとく、アンダーバーとスペースを入れると黄色いマークがでて、"Extraneous '_' in parameter, 'tableView' has no keyword argument name"というメッセージがでます。 ビルドはできてシミュレーター上はsectionのないTableViewが表示されます。 スペースを消すと黄色いマークは消えます。 View Controllerにでてくるfunc tableView(tableView: UITableView, ・・・のでてくるところすべてで確かめましたが、同じ結果です。
fuzzball

2016/10/11 06:53 編集

Swift2.3を選択しているので別の原因かも知れません。(私はXcode8環境が無いのでテスト出来ません) 一度、コードを元に戻して(アンダーバーを消して)、下記のことを教えて下さい。 (a) numberOfRowsInSectionやviewForHeaderInSectionは呼ばれているか? (b) .delegateやdataSourceは設定されているか? 【追記】 (c) Xcode上で、おもむろに`viewForHeaderInSection`と打ち込むとサジェスト機能が働いて候補が出てくると思うのですが、それで入力するとどうなるでしょうか?
Tomzy

2016/10/11 10:42

ありがとうございます。目下外出中ですので、明日ご報告します。
Tomzy

2016/10/12 01:56

ご報告します。 AAA print("ここまで来た01") print("ここまで来た02") print("ここまで来た03") をつけてランさせましたら、 print("ここまで来た02")はでませんでした。 その場所は  func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {  のreturnの前です。 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { と func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { はきています。 BBB .delegateやdataSourceは設定されているか?  ↓ ↓ ↓ 設定されています。 CCC サジェスト機能を使って、何カ所か試しましたが、皆原案どおりでOKでした。 現在ビルドは可能でただsectionタイトルだけが表示されていません。 111 //テーブルビューのセクション数を返すメソッド //func numberOfSectionsInTableView(_ tableView: UITableView) -> Int { func numberOfSectionsInTableView(tableView: UITableView) -> Int { return label.count } 222 //セクション毎のセル数を指定するメソッド ////func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 333 // header.textAlignment = NSTextAlignment.Center // header.backgroundColor = UIColor.redColor() // header.textColor = UIColor.whiteColor() // header.font = UIFont.boldSystemFontOfSize(18) // header.text = "ご希望の項目を触ってください" header.textAlignment = NSTextAlignment.Center header.backgroundColor = UIColor.redColor() header.textColor = UIColor.whiteColor() header.font = UIFont.boldSystemFontOfSize(18) }
fuzzball

2016/10/12 03:59 編集

let header = UILabel(frame: CGRectMake(0, 300, 200, 80)) を let header = UILabel(frame: CGRectMake(0, 0/*変更*/, 200, 80)) にして試してもらえますか? ‥と思ったのですが、viewForHeaderInSectionは呼ばれてないんですよね。 もう少し考えます。
fuzzball

2016/10/12 04:07

numberOfSectionsInTableViewの最初に、 print("delegate=", tableView.delegate) print("sectionHeaderHeight=", tableView.sectionHeaderHeight) を追加して、出力を教えてください。 たくさん出ると思いますが、全部同じだと思いますので最初の1セット(2行ぶん)だけでいいです。
Tomzy

2016/10/12 13:09

レスポンスが遅くなり申し訳ありません。 沢山でました。delegate 検索したら5カ所でました。その一部を下記にコピーペーストします。 2016-10-12 22:05:42.846084 Lesson03m[759:67045] subsystem: com.apple.UIKit, category: StatusBar, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0 delegate= Optional(<Lesson03m.ViewController: 0x7f88f8e03720>) sectionHeaderHeight= -1.0 delegate= Optional(<Lesson03m.ViewController: 0x7f88f8e03720>) sectionHeaderHeight= -1.0 delegate= Optional(<Lesson03m.ViewController: 0x7f88f8e03720>) sectionHeaderHeight= -1.0 delegate= Optional(<Lesson03m.ViewController: 0x7f88f8e03720>) sectionHeaderHeight= -1.0 delegate= Optional(<Lesson03m.ViewController: 0x7f88f8e03720>) sectionHeaderHeight= -1.0 ここまで来た03
fuzzball

2016/10/12 13:53 編集

原因は sectionHeaderHeight = -1.0 です。セクションの高さが-1になっています。 まず、どこかで-1になるような設定をしていないか確認して下さい。 確認する場所は以下の3つです。 (a) Storyboard上で-1を設定していないか?(今Xcodeを確認できないので、設定があるかどうか分かりません) (b) TableViewのsectionHeaderHeightプロパティに-1を代入していないか? (c) heightForHeaderInSectionを実装して-1を返していないか? もし設定しているようなら修正して下さい。 設定していないようでしたら、上記のいずれかで適当な高さ(例えば30.0とか)を設定して下さい。 【追記】 (b)の方法について追記しておきます。 例えば、TableViewのOutlet接続名がtableView02であれば、viewDidLoadの中で、 tableView02.sectionHeaderHeight = 30.0 とすればOKです。
Tomzy

2016/10/12 16:01

(a) storyboardではsectionは設定していませんでした。 (c) それらしきコードは見当たりません。 (b) View Controllerの設定は @IBOutlet var table:UITableView! でしたので、 table.sectionHeaderHeight = 30.0 といれましたら魔法のようにsectionタイトルが現れました。 ありがとうございました。 しかし、不思議なことがあります。この作業で気がついたのですが、第2画面のTableView02にもひとつだけsectionタイトルを設定して頁のタイトルにしていました。そのタイトルが消えていました。確かに以前は表示されていました。 ところが、そのTableView02には tableView.sectionHeaderHeight = 45 というコードが書かれていました。 二つの疑問があります。 111 何故、View Controllerにはそういう高さを指定するコードが以前は書かれていなかったのにsectionヘッダーが現れていたのか。→ 仕様の変化ですか? 222 TableView02 ではOutlet接続名が @IBOutlet var tableView02: UITableView! なのに、 tableView.sectionHeaderHeight = 45 と書かれていたのにsectionヘッダーが現れていて、今回は現れないのか? なお、TableView02に tableView02.sectionHeaderHeight = 30.0 tableView.sectionHeaderHeight = 45.0 tableView.sectionHeaderHeight = 45 いずれを入れてもsectionタイトルは現れません。 明日、さらに検討してご報告します。
fuzzball

2016/10/12 23:55

昨夜確認できなかったことも含めて色々と書いておきます。(Xcode7での確認なのでXcode8とは違うかもしれません) >>(a) storyboardではsectionは設定していませんでした。 Storyboard上でのセクションの高さはSize Inspectorで設定します。 「Table View」のところのSection Heightです。今回の場合はHeaderの方が該当します。デフォルト値は28で、0以下は設定できないようです。 >>そのTableView02にはtableView.sectionHeaderHeight = 45というコードが書かれていました。 過去の質問を見てみたのですが、https://teratail.com/questions/38203 で記述しているようです。これではないでしょうか? 「tableView」なのは、viewForHeaderInSectionの中に書いているからです。sectionHeaderHeightは最初に一度だけ設定すればいいので、viewForHeaderInSectionの中ではなく、viewDidLoadの中にtableView02.sectionHeaderHeight = 45.0と書けばいいです。 TableView02にセクションが表示されない件は、今回の質問で確認したことを同じようにやってみた上で、それでも表示されないようであれば、あらためて質問して下さい。
Tomzy

2016/10/13 02:35

本当にいろいろと教えて頂きありがとうございました。 111 storyboardのヘッダーとフッターの高さ調節の場所はわかりました。デフォルトになっていました。今回のバージョンアップでコードを書かないと表示されないと理解しました。 222 過去の質問、思いだしました。 333 viewDidLoadのすぐ下にコードを書きましたら、TableView02にもセクションが表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問