使用其父 VC 底部布局更改我的自定义 UIView 的约束

Posted

技术标签:

【中文标题】使用其父 VC 底部布局更改我的自定义 UIView 的约束【英文标题】:Change constraint of my custom UIView with its parent VC bottom layout 【发布时间】:2017-04-24 12:37:52 【问题描述】:

我有一个自定义 UIView,我想在我的项目中超过一半的 VC 上反复重用它。此外,在所有这些 VC 上,它都应该位于底部。

出于某种原因,我想在操作时使用 bottomLayoutGuide 更改其底部约束。如果我不关心重用这种结构,这很容易做到。然后我可以使用我的视图的插座更改此约束。但是,这意味着我必须在其他 VC 中复制代码。

如何避免这种重复并重用我的自定义视图,当前 VC bottomLayoutGuide 的约束可以在操作上更改?

【问题讨论】:

添加该代码,以便我可以帮助您优化该代码。 【参考方案1】:

创建一个类,它是 nsobject 的子类,并像这样编写函数。 在该子类中导入框架。

+ (UIView*)makeCustomViewWithBottomConstraint:(NSInteger)bottomConstant andHeight:(NSInteger)viewHeight inViewController:(UIViewController*)vc

    UIView *customView = [[UIView alloc]init];
    [vc.view addSubview:customView];
    customView.backgroundColor = [UIColor purpleColor];
    customView.translatesAutoresizingMaskIntoConstraints = NO;

    NSDictionary *metrics = @@"viewHeight":@(viewHeight),
                              @"bottomConstant":@(bottomConstant);
    NSDictionary *views = NSDictionaryOfVariableBindings(customView);

    NSArray *hConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|"
                                                                              options:0
                                                                              metrics:metrics
                                                                                views:views];
    NSArray *vConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view(viewHeight)]-bottomConstant-|"
                                                                              options:0
                                                                              metrics:metrics
                                                                                views:views];



    [vc.view addConstraints:hConstraint];
    [vc.view addConstraints:vConstraint];

    return customView;


并像这样在所需的视图控制器中访问此类方法

[CustomViewClass makeCustomViewWithBottomConstraint:0 andHeight:40 inViewController:self];

我已经在 GitHub 中添加了示例项目。对不起目标 C。我仍然喜欢这种语言。 github link

【讨论】:

以上是关于使用其父 VC 底部布局更改我的自定义 UIView 的约束的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体

派生 QMainWindow 并更改其布局

如何在布局底部更改我的相机位置

方向更改时的自定义 TableViewCell 自动布局问题

更改父(UIView)大小时布局不更改

底部工作表的动画布局更改