【问题标题】:cornerRadius not working if replacing default view with custom subclass如果用自定义子类替换默认视图,cornerRadius 不起作用
【发布时间】: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:没有任何变化。
  • 您找到解决方案了吗?我有同样的问题

标签: iphone objective-c ios uiview cornerradius


【解决方案1】:

你应该做两个视图:

  • 背景视图
  • 文本视图

对于您想要的文本背景的背景视图设置颜色。 对于文本视图,将背景颜色设置为透明色。

【讨论】:

  • 这不会改变任何东西。导航栏和其他子视图仍然显示在边缘
猜你喜欢
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多