読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSのAutoLayoutで複数行テキストのボタンが正しく改行されない

iPhone Swift

複数行テキストのボタンをAutoLayoutで配置したら、テキスト量によって改行するボタンを作りたかったんだけど、ハマってしまって改行してくれないボタンになってしまった。

f:id:ch3cooh393:20170202100511p:plain

作りとしては、UITableViewに改行ボタンを配置したカスタムセルを表示しているだけです。

修正した

きちんと改行してくれるように修正しました。

f:id:ch3cooh393:20170202100524p:plain

CustomButton.swift

CustomButton#intrinsicContentSizeを適切なサイズで返すと綺麗に改行させて表示させることができました。

import UIKit

class CustomButton: UIButton {

    override func awakeFromNib() {
        super.awakeFromNib()
        
        titleLabel?.numberOfLines = 0
        titleLabel?.lineBreakMode = .byCharWrapping
        titleLabel?.textAlignment = .left
        
        titleEdgeInsets = UIEdgeInsets(top: 0, left: 24, bottom: 0, right: 20)
    }
    
    override var intrinsicContentSize: CGSize {
        let margin = self.titleEdgeInsets.left + self.titleEdgeInsets.right

        var size = CGSize(width: self.frame.width - margin, height: CGFloat.greatestFiniteMagnitude)
        size = self.titleLabel?.sizeThatFits(size) ?? CGSize.zero
        size = CGSize(width: size.width, height: size.height + 16)
        
        return size
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        titleLabel?.preferredMaxLayoutWidth = titleLabel!.frame.width
        super.layoutSubviews()
    }
    
}

CustomTableViewCell.swift

import UIKit

class CustomTableViewCell: UITableViewCell {

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var heightLayoutConstraint: NSLayoutConstraint!
    
    var title: String? {
        didSet {
            updateDisplay()
        }
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    fileprivate func updateDisplay() {
        guard let title = title else {
            return
        }
        
        button.setTitle(title, for: .normal)
        button.setTitleColor(.black, for: .normal)
    }
    
}

MasterViewController.swift

    var objects = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()

        objects = [
          //省略
        ]
        
        tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "customCell")
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 300
        
    }

    // MARK: - Table View

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return objects.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
        cell.title = objects[indexPath.row]
        return cell
    }

メルカリで郵便事故にあった

雑記

ジャンクのゲームボーイを買ったり、ポケットモンスターを買ったりするのにメルカリを使っています。

ゲームボーイ(旧タイプ本体)

ゲームボーイ(旧タイプ本体)

ジャンクを買う分には、ハードオフで買う方が安いのことが多いのですが、自宅まで送ってもらえる楽さには敵わずメルカリを多用しています。

メルカリの印象

以前にメルカリについてはゲームボーイを買った時に「ヤフオク感覚でいたので正直『厳しい……』と思いました。」と書いていました。

当初、メルカリには正直言ってあんまり良い印象は抱いていませんでした。封の切ったコンドームとか使用済みパンツを売っていたり、たまにちんこの写真がアップロードされていたりと、無法地帯な印象を受けたからでした。

ローンチしてすぐの頃に、新規アカウント作成すると1,000円分のクレジットを追加するキャンペーンをやっていたので、美濃焼の器を買ってそのまま数ヶ月(数年?)放置したままでした。

去年末にゲームボーイAdvent Calendarを書くために、多くのゲームボーイが必要になったので再開しました。

メルカリをまた使うようになって2ヶ月経った今でもぶっちゃけ購入者・出品者は玉石混淆といった感じです。主に下記のようなトラブルが発生しました。

  • 明日送ると言いつつ2週間引き伸ばされる
  • 購入したけどお金ないので支払えませんとか言われる
  • 購入してもらったけど該当の商品がないので別の商品でもいいか?と言われる

トラブルが発生する度にメルカリ事務局に仲介に入ってもらってトラブルを解決してきました

相手を評価できるのが商品受け取り後なので、支払わなかったり商品を送らなかったりしてもその人の評価には影響しないんですよね。

メルカリでの支払い・評価の仕組み

メルカリの評価仕組みとしては、下記のようになっています。

  1. 購入者が商品を購入する
  2. 購入者がメルカリに対してお金を払う
  3. 出品者が商品を発送する
  4. 購入者が「受け取り評価」する
  5. 出品者が「購入者評価」する
  6. メルカリが出品者に対してお金を払う

購入者と出品者がお互いに評価するまでお金はメルカリでプールされたままになります。

f:id:ch3cooh393:20170220162639p:plain

出品者よりも購入者を手厚く保護されていることがわかります。

購入者からすると、金だけ取られて持ち逃げされる心配がないし、購入した商品が説明と違っている場合には評価をしないということで対話の機会を得ることができます。

また、出品者は購入者を評価する機会が与えられており、入金が遅かったり過剰な要求をしてくる購入者だった場合には低評価をつけることができます。

Amazonや楽天で買い物をするようなサービス品質で売買することはできませんので、どうしてもトラブルがついて回ってきます。……というか、なにかしらのトラブルは絶対に発生します

トラブルの度にメルカリ事務局に間に入ってもらって、発送する気のない出品者の場合にはお金を返してもらったり、お金を支払ってくれない場合にはメルカリから購入者にお伺いを立ててくれて「相手は支払う気がないので商品は絶対に発送しないでください」と取引自体をなかったことにしてくれたりと、スムーズに問題を解決してくれました。

前述した通りメルカリにはどんな人がいるのかわからないのですが、都度メルカリ事務局が適切にトラブルを解決してくれるのをみて、僕は次第にメルカリというサービスを信用するようになり使用頻度が高まっていきました。

配送事故にあった

んで本題です。

すでにAさんとのやりとりは削除されているため日にちが実際のものと異なるかもしれませんが、配送事故にあったと判明してから事故調査等のやりとりを覚えている限りメモしておきたいと思います。

1月20日にAさん(仮名)からポケモンのカセットを買いました。同じ日にBさんからポケウォーカーを買いました。その日のうちにAさんはポストに投函してくれたようでした。ちなみに普通郵便でした。

1月22日にAさんから「商品が到着していないか?」と確認の一報が入る。日本郵便の「お届け日数を調べる」ページで検索したところ2日〜3日となっていました。

www.post.japanpost.jp

発送したという1月20日は全国的にも大吹雪の日で、東京でも久しぶりに雪が降っていたくらいです。Aさん曰く「同じ日に東京に送った商品は到着している」とのことでしたが、Aさんのお住まいは雪国だったので数日待ってみましょうとお話をしました。

1月23日にポケウォーカーが届きました。AさんとBさんはたまたま同じ都道府県でしたが、Bさんの方が東京よりも遠いとのことでした。

1月24日、さすがに4日経ってお互いに不安を覚えたので、Aさんが郵便事故の調査依頼をしますねというのに同意しました。

郵便局員が訪問してくる

1月27日に郵便局員が我が家に訪問しました。郵便事故の調査って郵便局間での調査で終わるものだとばかり思っていました。

発送者と受け取り者が嘘をついていないことを前提で調査するので、下記のケースについては調査しないようでした。

  • Aさんが送った詐欺をしている
  • Aさんが住所を書き間違えている
  • 僕が届いていない詐欺をしている

郵便局員の方曰く「郵便事故の原因は大きくわけて3種類あります」とのことでした。

  1. 郵便中にどこかに落とした
  2. (僕がマンションに住んでいるので)別の部屋のポストに投函した
  3. 郵便局間移動の際に荷物を紛失した

1のケースに関しては事例として少ない(日本の郵便局員は優秀っぽい *1 )ので、2と3のケースについて調査しますとのことでした。

3のケースについては、(僕の家に訪問した)郵便局員は関与できない部分で私は2のケースについて調査をおこなって、各所の調査結果をまとめてAさんに送ります。と教えていただきました。

翌日の1月28日に再度同じ郵便局員の人が我が家に訪問して、上下左右の部屋に聞いてみたけれど間違って届いていたりはしていませんでした。と教えてもらいました。

その後の顛末

2月14日にAさんから郵便事故の調査書が届いた旨を教えてもらいました。残念ながら僕が買ったポケモンはどこにいったのか分からず紛失してしまったようでした。

僕が支払ったお金はメルカリにプールされているので商品未達でお金が帰ってきたとしても、Aさんは商品も失ってお金も入ってこないと可哀想だなぁ……と思っていました。可哀想だけど、かといって僕のお金を渡してくださいとは言えないしで、悶々としていました。

2月16日にメルカリ事務局から「【重要】事務局で双方に取引の補償を行います」とのメールが来ているのに気付きました。

メルカリアプリで確認すると僕が払ったお金が戻って来ました。もう連絡を取ることはできないので確認を取ることはできませんが、Aさんの方には本来僕から支払うはずだった売上金が入金されていることでしょう。

さすがに毎回とはいかないとは思いますが、これからずっと悶々として気持ちで過ごさないといけないのかなと思っていたので、このメルカリ事務局の采配には素直に感謝しました。

僕はAさんに対して現状に関しての連絡を毎日入れていて、Aさんも僕に状況を説明してくれていたというのが良かったのかもしれません(メルカリ事務局は必要に応じて取引メッセージの確認をすることになっている)。

まとめ

このエントリを簡単にまとめてみました。

  • 取引相手は基本的に信用しても大丈夫
  • 未発送や未払いにあった場合にはメルカリ事務局に相談しよう
  • Amazonやネットショップで買い物するようにはいかない (急ぎのものは絶対に買わない)
  • 発送方法は補償・追跡機能があるものにしよう

メルカリでの取引の相手は基本的に信用しても大丈夫です。

もし未発送や未払いにあったとしてもメルカリ事務局が間に入って調停してくれる*2ので、あからさまに怪しい出品者を避けておけばトラブルが発生しても損失をこうむることなく取引ができると思います。

最後に、発送には普通郵便ではなくて補償・追跡付きの配送方法を使ったほうが良いですね。売値の低い場合は補償付きの配送方法を選択するのが難しいかもしれないけれど、せめて追跡付きの方法を選択した方がよいでしょう。

個人的にはクリックポストは164円で補償はないけれど追跡ができるのでオススメです。

*1:たまに郵便物を捨てたとかでニュースになっているけれど

*2:あくまでも商品未発送や支払いをしてくれなかったりする件についてです。郵便事故の際の補償があるかどうかについてはわかりません、というか個人取引なので期待しない方がいいでしょう

群馬・伊香保温泉に行ってきました 後編

旅行とか

ニンテンドーSwitchが予約できなかったのでムシャクシャして、、2月3,4日に伊香保温泉に行った記録の後編です。前編は下記のリンクからご覧ください。

1日目

伊香保での宿は、和心の宿オーモリにしました。

温泉街なのでホテルがたくさんあるのですが、楽天トラベルのレビューをみて一番良さそうだったオーモリ決めていました。

ホテル

ホテルからの眺めが良い。左側にちらっと見えているのが廃業したホテルです。景観的には取り壊してほしいところですが壊すのにもお金がかかるのでしょう。外壁が剥がれてコンクリが落ちているので危ない。

16時にチェックインしたらすぐに即露天風呂に行きました。

伊香保の石段を登りきった疲れなのか湯当たりしたのか、ぐったりしたので部屋に戻ってきてそのまま寝てました。

18時になったのでご飯を食べに行きました。

節分なので恵方巻きがおまけらしい。

次々と運ばれてくる料理。

このおかずの時点ですでにおなかいっぱいだったのですが、締めでお茶碗に入ったご飯とおっきりこみが運ばれてきました。おっきりこみと言うのは、群馬の方のうどんのようでした。ゆるいきし麺のような感じでしょうか。

部屋に戻って景色を見ながら腹ごなしして、1階にある大浴場にいきました。

温泉について

伊香保といえば黄色く濁った「黄金の湯」なのですが、このホテルは透明な「白銀の湯」でした。

8階の露天風呂は浅いので肩まで浸かれませんでした。もうちょっと深くてよいかも。

洗い場のある大浴場が1階にあって、露天風呂は8階にあるのですが洗い場はないため、面倒くさいと思うタイプの方には合わないかもしれません。

ほとんどの人が露天風呂に行くので大浴場は穴場です。1日目と2日目の朝に大浴場に行ったのですが見事に誰もおらずゆっくりと湯につかることができました。個人的には露天風呂よりも大浴場の方がおすすめです。

2日目

朝食

朝から結構なボリュームでした。

部屋に戻って来ました

2日目の朝の景色です。無事

廃業したホテルを眺めることができます。急斜面に立っているので取り壊すのもお金がかかりそう。

チェックアウトは11時でも良いらしく、特に予定もないので大浴場に浸かりながらダラダラと過ごしました。

石段街

戻ってきました。

公園の池は凍っていました。結構厚みがあったので僕が乗っても大丈夫だったかもしれません。

徳富蘆花記念文学館

渋川駅へ向かうバスは1時間半にしかなく、50分くらい待ち時間ができたので「徳富蘆花記念文学館」へ行きました。徳富蘆花といえば京王線ユーザーは知っている芦花公園駅の徳富蘆花です。

徳富蘆花の生涯を紹介するDVDを見ていたらあっという間に時間がなくなってしまいました。早足で見て回ります。

常宿を移築したそうです。なぜ伊香保に徳富蘆花の記念館があるのかというと、伊香保が好きで度々訪れていたこと、伊香保で亡くなったことが挙げられるようです。

時間ギリギリでバス停に向かうも、5分遅れでバスが到着しました。基本的に伊香保に向かう道路は一車線の上、慣れない観光客が運転する車で詰まるらしく遅延しやすいようです。豪雪地帯なので暖かい日でよかったです。バス停で遭難してしまう……

湯の花饅頭

食の駅ぐんま 伊香保

石段街から食の駅へ。

遊喜庵

食の駅ぐんまに併設されているうどん屋さん。

海老天丼セット(1,200円)をいただきました。

昨日水沢うどんを食べていたので味を比較するのは失礼かもしれません……

渋川駅

無事、渋川駅にたどり着くことができましたが、特急が来るまで2時間も持て余してしまいました。

散策したあと、近くのカフェ(1件しか見つけられなかった)でコーヒー飲みながら特急が来るのを待って帰りました。