我有tableview
个自定义单元格,这些自定义单元格是使用storyboard
从AutoLayout
构建的,其标识符使用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;
结果:
答案 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)
您有两种选择:
喜欢以下
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
并在那里改变它。要访问您调用的单元格
[(YourCell *)cell view]....