31091


storyboradにて、UITableViewにUITableViewCellを配置し、cell内のimageViewの高さを  
autolayoutで可変（画面サイズによって）にしています。

この時、コードの中で、そのimageViewを正円にしようとしているのですが  
imageView.frameのサイズが初回描写時とスクロールした時で異なっていて、  
初回描写時だけうまく正円にならず、困っています。  
tableViewをスクロールすると、再描写？して正円になり、以降はずっと正円となります。

[code]

    func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeReusableCellWithIdentifier("sampleCell", forIndexPath: indexPath)
        let imageView = cell.viewWithTag(1) as ! UIImageView
        ・・・
        // 画像を正円にする
        print(imageView.frame.size.height)  // ←初回とスクロール時で値が異なる。（初回のみ82、以降は64）
        imageView.layer.cornerRadius = (imageView.frame.size.height * 0.5)
        imageView.layer.masksToBounds = true
    }
    
[/code]

初回から正しく正円にするため、imageViewのサイズを正しく取れる方法はありますでしょうか。


CC BY-SA 3.0
2016-12-12T01:52:58.203
31089
2016-12-12T04:11:27.873
19467
question
swift xcode
UITableViewCellのimageViewのサイズ


ほかにもアイデアはいくつもあるでしょうが、ひとつのアイデアとして、つねに円形になる、`UIImageView`のサブクラスを使用することを考えてみます。

[code]

    class RoundImageView: UIImageView {
    
        override func layoutSubviews() {
            super.layoutSubviews()
    
            self.layer.cornerRadius = self.bounds.size.height / 2.0
            self.layer.masksToBounds = true
        }
    
    }
    
[/code]

このクラス`RoundImageView`は、四隅がViewの高さの半分の半径の円弧になり、Viewのサイズを変えると、その半径も追随して変化します。

[![画像の説明をここに入力](https://i.stack.imgur.com/Gj66X.png)](https://i.stack.imgur.com/Gj66X.png)

実用にするには、もうすこし作りこむ必要があるかもしれませんが、Auto Layoutにる、サイズの変化に追随させるには、これだけでもできます。


CC BY-SA 3.0
2016-12-12T04:11:27.873
31091
2016-12-12T04:11:27.873
18540
31089
answer