如果用自定义子类替换默认视图,cornerRadius 不起作用
Posted
技术标签:
【中文标题】如果用自定义子类替换默认视图,cornerRadius 不起作用【英文标题】:cornerRadius not working if replacing default view with custom subclass 【发布时间】:2012-10-20 15:26:37 【问题描述】:以下设置:
我有一个 popupViewController,它有一个自定义 UIView 子类作为它的视图,在 loadView
中完成
- (void)loadView
CGRect startingPopupSize = CGRectMake(0.0f, 0.0f, 300.0f, 160.0f);
_popupView = [[MoviePopupView alloc] initWithFrame:startingPopupSize];
self.view = _popupView;
在这个 UIView 子类中,我的 init 方法中有以下代码
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
self.layer.masksToBounds = YES;
self.layer.opaque = NO;
self.clipsToBounds = YES;
self.backgroundColor = [UIColor whiteColor];
self.layer.borderWidth = 1.0f;
self.layer.cornerRadius = 10.0f;
return self;
问题是,cornerRadius
不适用于此视图,但会绘制边框,请参见此处:
如果我不使用 uiviewcontroller 的默认 uiview 替换此视图,而是将其添加为子视图,cornerRadius 工作正常(我想替换它有几个原因)。
任何想法为什么这不起作用?
编辑:
如果我只是将层masksToBounds = YES
属性从initWithFrame
方法移动到drawRect
方法它可以工作。将其移至其视图控制器 viewDidLoad
不会。
- (void)drawRect:(CGRect)rect
// Drawing code
self.layer.masksToBounds = YES;
任何想法为什么这有效?我认为这里不适合设置此属性。
【问题讨论】:
你试过了吗:1)设置self.layer.masksToBounds = YES 2)在viewDidLoad中设置cornerRadius,而不是initWithFrame? 如您所见,self.layer.masksToBounds = YES
已设置,我尝试在其视图控制器的 viewDidLoad
方法中设置它,而不是它自己的 initWithFrame
:没有任何变化。
您找到解决方案了吗?我有同样的问题
【参考方案1】:
你应该做两个视图:
背景视图 文本视图对于您想要的文本背景的背景视图设置颜色。 对于文本视图,将背景颜色设置为透明色。
【讨论】:
这不会改变任何东西。导航栏和其他子视图仍然显示在边缘以上是关于如果用自定义子类替换默认视图,cornerRadius 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
用自定义警报视图替换对话框“打开位置服务以允许应用程序确定您的位置服务”[关闭]
php 用自定义WordPress仪表板替换默认的WordPress仪表板