在自定义 UIView 类 Iphone 上应用自动布局约束。

Posted

技术标签:

【中文标题】在自定义 UIView 类 Iphone 上应用自动布局约束。【英文标题】:Applying auto layout constraints on custom UIView class Iphone. 【发布时间】:2014-08-05 16:05:27 【问题描述】:

我正在开发使用自定义 UIView 类的简单 iPhone 应用程序。 因此,当我将该类应用于故事板中的视图时,它会停止接受我的自动布局约束。我试图在故事板中应用约束。所以我的自定义 UIView 类看起来像

 @implementation RoundedView
- (id)initWithFrame:(CGRect)frame

self = [super initWithFrame:frame];
if (self) 
    // Initialization code

return self;

- (void)awakeFromNib

[super awakeFromNib];
UIRectCorner corners;
 … some code ...
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                               byRoundingCorners:corners
                                                     cornerRadii:CGSizeMake(self.radious, self.radious)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame         = self.bounds;
maskLayer.path          = maskPath.CGPath;
self.layer.mask         = maskLayer;


我将这个类应用到我在故事板中的视图中,它工作正常,但它没有听我的限制。那么如何在这种情况下应用约束。有人知道这个吗?需要一些帮助。谢谢你。

【问题讨论】:

你是说没有 awakeFromNib 代码也能工作吗? 您是否尝试将 maskLayer 的 needsDisplayOnBoundsChange 设置为 YES ? 你首先需要设置 maskLayer 的框架。我相信图层不受自动布局的影响。 @cekisakurek 你能帮我做吗? @cekisakurek 我试过maskLayer.needsDisplayOnBoundsChange = YES; 但它仍然不适合我。如何做到这一点? 【参考方案1】:

您需要更改图层的框架以匹配其父视图。

- (void)layoutSubviews
    [super layoutSubviews];
    [maskLayer setFrame:self.bounds];

【讨论】:

在这篇文章中添加更多细节,解释它的作用可能对 OP 有用。 @cekisakurek 感谢您的重播。我试过你的解决方案。但这对我不起作用。

以上是关于在自定义 UIView 类 Iphone 上应用自动布局约束。的主要内容,如果未能解决你的问题,请参考以下文章

如何擦除 iPhone 中自定义 UIView 上的手指画

在自定义 UIView 类中从 UIView 快速创建 IBoutlet [重复]

无法使图表对象在自定义UIView中工作

尝试在自定义 UIView 子类上使用点击识别器时出现 NSUncaughtException

UIView beginAnimations 在自定义属性上太快了

在自定义 UIview 中设置 UItableview 的委托和数据源