SwiftUIのリストで自動的に生まれる要素間スペースを無くす方法

投稿者: Anonymous 現在SwiftUIを勉強中の者です。 以下のリストのコードで、各要素と要素の間にスペースが生まれてしまうのですが、このスペースを完全に無くすにはどうしたら良いでしょうか struct MainContent: View { var body: some View { List() { Text(“aaa”).border(Color.white) Text(“bbb”).border(Color.white) } } } 上記コードの結果が以下の画像です。aaaとbbbの間にスペースが生まれています。これを無くし、borderが完全に重なるようにしたいです 解決 結局リストではスペースを無くすことができませんでしたので、別の手段を用いることにしました。 VStack(alignment: .leading, spacing: 0) { ForEach(values, id: .id) { data in Text(“aaa”).border(Color.white) } } 回答者: Anonymous

cellの外側を確立することはできるのか

投稿者: Anonymous 今、collectionViewのcellの外をタップしたときに画面遷移したいのですがcollectionViewCellの外側というのを判定することができません。 下の写真の黄色い部分です。 画面遷移のコードは outsideCell.gestureRecognizers = [UITapGestureRecognizer(target: self, action: #selector(self.outsideTouch(_:)))] 教えていただけないでしょうか。 解決 UICollectionView で表示してる cell の外側をタップされた時にコードを実行したいということでしたら、UICollectionView の backgroundView に UITapGestureRecognizer を追加した UIView を追加してください。 import UIKit final class ViewController: UIViewController { @IBOutlet private weak var collectionView: UICollectionView! override func viewDidLoad() { super.viewDidLoad() let view = UIView(frame: .zero) let recognizer = UITapGestureRecognizer(target: self, action: #selector(handleCollectionViewBackgroundTap(_:))) view.addGestureRecognizer(recognizer)…(Continue Reading)

SmartNews風タブUIのおすすめのパッケージ

投稿者: Anonymous 今、SmartNews(スマートニュース)風のアプリケーションを作成しているのですが、 どのパッケージもSwift5に対応しているものがありません。 なにかおすすめのものがありましたら、ご教授お願いいたします。 調べたパッケージ XLPagerTabStrip PageMenuKitSwift PageMenu PagingMenuController 解決 XLPagerTabStripのGitHubリポジトリのREADMEには、Swift5に対応する旨表記されていますので、これが使えるはずです。 もしくはそのようなUIの作り方を解説した記事を参考に、自作してみてもよいと思います(単純なものであれば数百行程度で実装できるみたいです)。 回答者: Anonymous

SwiftUI Steppperのvalueをバインディングできない

投稿者: Anonymous わからないこと ViewModelにあるDrinkのdrink.cupsとStepperの値をバインディングしたいです。 SwiftUIを用いて、Stepperを使おうとしたのですが 61行目のようにStepperを使おうとすると Cannot convert value of type ‘Published<UInt>.Publisher’ to expected argument type ‘Binding<_>’ とエラーが出てしまいます。 環境 Xcode 11.3 Swift 5.13 ソースコード import SwiftUI import Foundation import Combine class Drink: ObservableObject, Identifiable { @ObservedObject var viewModel: ContentViewModel let id: String = UUID().uuidString let name: String //名前 let one_of_caffein_amount: float_t //一杯あたりのカフェインの量[mg] @Published var cups:…(Continue Reading)

UITableViewの中にUICollectionViewを入れたいのですが、エラーがでてできません

投稿者: Anonymous UITableVIewの中にUICollectionViewを入れたいのですが、 Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘UICollectionView must be initialized with a non-nil layout parameter’ とエラーがでます。なぜでしょうか、また解決策はなんでしょうか。 ご教授お願い致します。 現在のコード(全てコードで書いています) TableViewCell let width = UIScreen.main.bounds.width let height = UIScreen.main.bounds.height class TableCell: UITableViewCell { var collection = UICollectionView() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) self.setup() } required init?(coder: NSCoder)…(Continue Reading)

Thread 1: EXC_BREAKPOINT (code=1, subcode=0x104190304)のエラーが発生します

投稿者: Anonymous Xcode11.3 Swift5 macOSMojave10.14.6 Facebookのコメント投稿画面のような、タイムライン画面(TableView)から記事(セル)をタップし、遷移先画面でコメントを投稿できる機能を実装したのですが、コメント投稿を試みる際(teXtFieldをタップした時)、時折Thread 1: EXC_BREAKPOINT (code=1, subcode=0x104190304)のエラーが発生します。発生する時と発生しない時があります。発生箇所はテキストフィールドがキーボードと被らないようにする部分です(画像右側)。コンソールにはFinal error、reason等の表示はありません。 原因と対策をご教授願います。 コメント表示部分はtableViewを使用し、tableViewCellを使用しています。 ●タイムライン画面から遷移したコメント投稿画面 import UIKit import Firebase import SVProgressHUD class ArticleViewController: UIViewController,UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var articleImage: UIImageView! @IBOutlet weak var articleLabel: UILabel! @IBOutlet weak var articleButton: UIButton! @IBOutlet weak var articleLilkeCount: UILabel! @IBOutlet weak var commentTextField: UITextField! @IBOutlet weak var commentTableView:…(Continue Reading)

Viewの各辺にそれぞれ別の線を引く

投稿者: Anonymous SwiftUIで以下の画像のようなレイアウトを作りたいと思っています。 そこで、Viewの左側は水色の太い線を、下側には細い灰色の線を引きたいのですが、border関数ではどうもできないようです。 Viewの各辺にそれぞれ別の線を引く方法を教えて下さい。 解決 さて、ご自身でもいろいろ調べられたようですが、borderでは、辺を指定するような機能はないようです。文字通り自分で「線を引く」必要があるようです。 任意の線・図形を描くため、UIKitのUIBezierPathに相当するものとして、SwiftUIにはPathなんてものがあります。 BorderedView.swift import SwiftUI struct BorderedView: View { var body: some View { ZStack(alignment: .leading) { //↓この部分を自分の表示したいViewに置き換え HStack { Text(“□”) Text(“Text”) }.padding(10) //↑ BottomBorder(width: 1) .foregroundColor(.gray) LeftBorder(width: 5) .foregroundColor(.blue) } } } struct LeftBorder: Shape { var width: CGFloat func path(in rect: CGRect) -> Path { Path( CGRect(…(Continue Reading)

Documentsフォルダにある動画ファイルが再生出来ない

投稿者: Anonymous Documentsフォルダにダウンロードした動画ファイル (*.mov, *.mp4) を再生したいと思い、 以下のコードを書きました。 しかし、同じ動画ファイルでも、①の方法では再生され、②の方法では再生されません。 moviePathの値を確認したのですが、特に問題なく、Documentsフォルダに該当の動画ファイルがありました。 Bundle.main.path で指定した場合: 動画は再生される moviePath = localMovieFilePath! + localMovieFileName! で指定した場合: 動画が再生されない info.plist の App Transport Security Settings -> Allow Arbitrary Loads は YES にしております。 どなたかわかる方、ご教授願えませんでしたでしょうか。 /// 動画を再生する func playAnimetion() { let localMovieFilePath: String? = UserDefaults.standard.string(forKey: Constants.localMovieFilePath) let localMovieFileName: String? = UserDefaults.standard.string(forKey: Constants.localMovieFileName) let moviePath: String if (localMovieFilePath…(Continue Reading)

SwiftからCのライブラリーを呼び出す際のDataについて

投稿者: Anonymous Swift 4からCのインターフェースで提供されるframeworkを呼び出すにあたって、ファイルから読み込んだバイナリーデーターのポインターを関数に渡す必要があります。 バイナリーデーター自体はSwiftの let data: Data = try Data(contentsOf: dataURL) で読み込んだのは良いのですが、このdataからUnsafePointer<Int8>!で、データー列の先頭アドレスを取得する一般的な方法はどの様になるのでしょうか? .withUnsafeBytes<Int8>で愚直にコピーする DataではなくNSData.bytesをキャストする が考えられますが、もっと素直に変換または取得出来るような気がするため、こうするといいよという方法がありましたらお教え下さい。 解決 SwiftのwithUnsafeBytesには2種類のメソッド func withUnsafeBytes<ResultType, ContentType>(_ body: (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType と func withUnsafeBytes<ResultType>(_ body: (UnsafeRawBufferPointer) throws -> ResultType) rethrows -> ResultType があり、前者はOS X 10.14.4でDeprecateになるよという警告が出る様になったので、今後のSwiftで使い続けるためには後者のメソッドを使い、 data.withUnsafeBytes({ (userDictionary: UnsafeRawBufferPointer) -> UnsafeMutableRawPointer? in if let ptr = userDictionary.baseAddress {…(Continue Reading)

Swiftでタブ移動をコードで行った場合に検知する方法はありますか?

投稿者: Anonymous 複数のViewControllerとタブバーを持ったiOSアプリを作成しています。 その中で「最初のタブに戻った場合に所定の処理を実行」というのをやりたいのですが、Swiftコードでタブ移動した場合に検知する方法がわからず困っています。 タブバーのアイコンをタップした場合の検知は https://stackoverflow.com/questions/33837475/detect-when-a-tab-bar-item-is-pressed こちらのコードを参考にして検知できるようになったのですが、他のViewControllerから self.tabBarController?.selectedIndex = 0 のような形で遷移している処理があり、そちらで移動した場合は上記のURLで書いたコードは反応してくれませんでした。 コードで遷移させたことを遷移先(最初のタブのViewController)の方で検知する方法はあるのでしょうか。 お知恵を拝借できましたら幸甚です。 よろしくお願いいたします。 解決 selectedIndexに自分で代入しているのならタイミングはわかっているので、代入の前か後で自分でなんらかの通知を送るか、下記のように自分でデリゲートメソッドを呼ぶと簡単です。 tabBarController.selectedIndex = 0 if let selectedViewController = tabBarController.selectedViewController { tabBarController.delegate?.tabBarController?(tabBarController, didSelect: selectedViewController) } ライブラリなどの自分が手を出せない部分で呼ばれているなら、下記のようにKVOを用いてselectedIndexまたはselectedViewControllerを監視する方法もあります。 kvoToken = tabBarController?.observe(.selectedIndex, options: [.new]) { (tabBarController, change) in if let selectedIndex = change.newValue { print(selectedIndex) } } kvoToken = tabBarController?.observe(.selectedViewController, options: [.new]) { (tabBarController,…(Continue Reading)

firebaseを用いたSNSアプリでコメント投稿の機能を実装したい

投稿者: Anonymous Xcode11.3 Swift5 macOSMojave10.14.6 Facebookのコメント投稿画面のような、タイムライン画面(TableView)から記事(セル)をタップし、遷移先画面でコメントを投稿できる機能を実装したいのですが、セルをタップした際に遷移先へそのセル番号(indexPath.row)を送る方法と、遷移先でセル番号を検知してFirebaseへ保存する方法がわかりません。ご教授願います。 遷移元はdidSelectRowAt内で遷移先へセル番号を送るのだと思いますが、以下で合っているのかどうかがわかりません。 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // タップされたセルの行番号を出力 print(“(indexPath.row)番目の行が選択されました。”) let postData = postArray[indexPath.row] //記事画面へ遷移(セグエ) let nextVC = self.storyboard?.instantiateViewController(withIdentifier: “Article”) as! ArticleViewController //completionでSetPostDataに渡す self.present(nextVC, animated: true, completion: { nextVC.SetPostData(postData) }) performSegue(withIdentifier: “Article”, sender: postArray[indexPath.row]) //セルの選択を解除 tableView.deselectRow(at: indexPath, animated: true) } 遷移先ではTextFieldにコメントを入力し、UIButtonを押すとUILabelに反映されるようにしたいのですが、セル番号を受信する方法がわかりません。 @IBAction func CommentButton(_ sender: UIButton) {…(Continue Reading)

SwiftでUse of unresolved identifier ‘JSONSerialization’というエラーが出る

投稿者: Anonymous Swiftの辞書型をJSONに変換したいと考えています。 以下のURLにて、JSONSerializationを使用して辞書型をJSONに変換している例を見かけたので試してみました。 How to create JSON from a dictionary in Swift 4? | Apple Developer Forums var messageDictionary : [String: Any] = [ "sender": "[email protected]", "recipients":"[email protected]", "data": [ "text": "Test Message" ], ] let jsonData = try JSONSerialization.data(withJSONObject: messageDictionary, options: []) let jsonString = String(data: jsonData, encoding: String.Encoding.ascii)! print (jsonString) すると、以下のようなエラーが出ます。 Use of…(Continue Reading)

記事ごとのFirebase孫データの取得ができず、全ての記事で同じコメントが表示されてしまう。

投稿者: Anonymous Xcode11.3 Swift5 macOSMojave10.14.6 実現したいことと フェイスブックのコメントボタンを押した時のような、UITableViewを使用したタイムライン画面(HomeViewController)から個別の画面(ArticleViewController)に遷移(画像1) ↓ (ArticleViewContorollerの)TextFieldにコメントを入力後、投稿ボタンを押すと、遷移前のタイムライン画面(HomeViewController)でタップしたセルと同じセル番号にコメント文がFirebase(commnets)に追加され(画像2)、遷移後の画面(ArticleViewController)にあるテーブルビュー(commentTableView,CommentTableViewCell)にコメントが表示される ↓ 別のユーザーがコメント投稿するごとに下に増えていく 困っていること Farebaseにはタイムラインの記事ごとにコメントが格納されますが、そこからカスタムセル(CommenTabaleViewCell)で記事ごとのコメントデータを表示せず、全てのコメントが表示されてしまい、他の記事を表示しても同じコメントになってしまいます。 ArticleViewControllerからCommentTableViewCellへのindexPathの渡し方が悪いと思いますが、ご教授願います。 firebaseには孫データ(comments)が反映されています。 タイムライン画面 import UIKit import Firebase class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var tableView: UITableView! var postArray: [PostData] = [] // DatabaseのobserveEventの登録状態を表す var observing = false override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self let nib…(Continue Reading)