在UIView子类中添加编程约束的位置?

时间:2016-04-30 02:38:38

标签: ios cocoa-touch model-view-controller uiview

我有一个名为CustomRectangle的自定义UIView子类。我在ViewController中实例化它并在ViewController中创建它的所有约束。我的目标是以编程方式在此UIView子类中创建所有约束。问题是我不知道如何在那里设置约束,因为我没有引用Storyboard中的任何其他视图。

例如,如果我希望我的视图CustomRectangle基于另一个视图居中,我会在ViewController中为另一个视图创建一个@IBOutlet,然后使用它来居中{{1} }。我不知道在UIView子类中是否可以这样做。

我想基于MVC(模型视图控制器)架构来做这件事。

最佳做法是什么?关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

您应该使用initWithFrame CustomRectangle方法来执行此操作。

for UIView's Subclass

- (id)initWithFrame:(CGRect)frame{

self = [super initWithFrame: frame];

if (self) {


    [self setFrame:CGRectMake(0, 0, 50, 50)];
    //add constraint here for example

    [self addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1 constant:50]];

}
return self;
}

转换为swift这是客观的c代码!!

希望这会有所帮助:)

答案 1 :(得分:0)

你应该做一些事情:

  1. 请记住设置translatesAutoresizingMaskIntoConstraints = NO以使约束生效。但是,如果您认为视图是autolayout方式,那么您应该在视图中使用autolayout作为子视图,并且实例化视图的视图应该向customRectangle添加约束(a.k.a widht,alignment等)
  2. 在init方法中,您只需添加仅依赖于视图的约束。应从外部添加其他限制。
  3. 例如:

    CustomRectangle *customRectangle = [[CustomRectangle *customRectangle alloc] init];
    // just to be sure
    customRectangle.translatesAutoresizingMaskIntoConstraints = NO;
    // just as an example
    [self.view addConstraints[NSLayoutConstraint constraintWithItem:customRectangle attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view  attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]];
    

    希望它有所帮助!!