自动布局后使视图回合

时间:2015-05-20 11:52:48

标签: ios uiview autolayout

我有tableview个自定义单元格,这些自定义单元格是使用storyboardAutoLayout构建的,其标识符使用subviews

其中一个(layer.cornerRadius = width/2)需要为layoutSubviews(),它在开头就是一个正方形。

我在AutoLayout尝试过,但似乎在didMoveToSuperview()更改其大小之前调用了它...同样的事情AutoLayout

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell_small") as! Cell ... return cell } // In Cell override func layoutSubviews() { rankLabel.layer.cornerRadius = rankLabel.bounds.width/2 rankLabel.layer.masksToBounds = true } override func didMoveToSuperview() { rankLabel.layer.cornerRadius = rankLabel.bounds.width/2 rankLabel.layer.masksToBounds = true } 更改尺寸后,将此类内容更新到我的子视图的正确功能在哪里?

var svgEl = document.getElementById("my-svg"),
    bb = svgEl.getBBox();
svgEl.style.height = bb.y + bb.height;
svgEl.style.width = bb.x + bb.width;

结果:

6 个答案:

答案 0 :(得分:12)

我最终做的是创建一个名为RoundView

的课程
class RoundView:UIView {
    override func layoutSubviews() {
        super.layoutSubviews()

        self.layer.cornerRadius = self.bounds.width/2
        self.layer.masksToBounds = true
    }
}

然后我将它应用于我需要围绕的每个视图。因此,在故事板中,我将RoundView添加到Custom Class

发生的事情是,如果您查看故事板(XML)的源代码,每个视图都具有整个屏幕的大小,您可以查看自己的SB代码。因此,通过尝试在其父width/2内添加等于layoutSubviews()的角半径,子视图未正确设置其框架。因此,角半径的值为320/2,而不是50/2,这就是它变形的原因。

答案 1 :(得分:3)

1.创建自定义类UIView / category

#import <UIKit/UIKit.h>
@interface RoundView : UIView

@end
#import "RoundView.h"

2.添加layoutSubviews方法并设置圆角半径。

@implementation RoundView

-(void)layoutSubviews{

[super layoutSubviews];

self.layer.cornerRadius = self.bounds.size.width/2;

self.layer.masksToBounds = true;

}

3.将你的UIView作为RoundView的子类并运行应用程序,你可以看到圆形视图。

答案 2 :(得分:1)

尝试像这样继承UITableViewCell,

@interface RoundingCell : UITableViewCell

@property (nonatomic,weak) IBOutlet UILabel * someLabel;

@end

@implementation RoundingCell

-(void)layoutSubviews
{
    [super layoutSubviews];
    self.someLabel.layer.cornerRadius = CGRectGetHeight(self.someLabel.bounds)/2;
    self.someLabel.layer.masksToBounds = YES;
}

@end

并将此作为所需单元格的类,以及IBOutlet连接。

答案 3 :(得分:1)

我的imageview遇到了同样的问题所以我通过对UIImageView进行子类化解决了这个问题。

@interface MyImageView : UIImageView

@end
@implementation MyImageView

-(void)layoutSubviews
{
    [super layoutSubviews];    
    self.layer.cornerRadius = self.bounds.size.width / 2.0;
}
@end

答案 4 :(得分:0)

奇怪的是,我只是使用你的代码来制作圆形单元格。 (我也使用自动布局)。

唯一的区别是,我使用。frame而不是。bounds(除以2)。你试过了吗?

否则,您可以使用自定义单元格并在 - awakeFromNib集合中以相同的方式进行舍入,这样您就不必在每个单元格中执行此操作。

答案 5 :(得分:-1)

您有两种选择:

  1. 创建自定义类YourCell并将您的代码添加到initWithCoder-Method
  2. 向ViewController添加方法
  3. 喜欢以下

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    

    并在那里改变它。要访问您调用的单元格

    [(YourCell *)cell view]....