gpt4 book ai didi

ios - 使用自动布局向 UIView 添加特定边框

转载 作者:行者123 更新时间:2023-11-29 12:07:33 27 4
gpt4 key购买 nike

在 Swift 中找到解决方案:How to add a border just on the top side of a UIView

在 Objective-C 中需要它。所以我可能必须 Dig Swift 才能转换它,但我还没有学习 Swift。

快速代码:

func addBorder(edges edges: UIRectEdge, colour: UIColor = UIColor.whiteColor(), thickness: CGFloat = 1) -> [UIView] {

var borders = [UIView]()

func border() -> UIView {
let border = UIView(frame: CGRectZero)
border.backgroundColor = colour
border.translatesAutoresizingMaskIntoConstraints = false
return border
}

if edges.contains(.Top) || edges.contains(.All) {
let top = border()
addSubview(top)
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:|-(0)-[top(==thickness)]",
options: [],
metrics: ["thickness": thickness],
views: ["top": top]))
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-(0)-[top]-(0)-|",
options: [],
metrics: nil,
views: ["top": top]))
borders.append(top)
}

if edges.contains(.Left) || edges.contains(.All) {
let left = border()
addSubview(left)
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-(0)-[left(==thickness)]",
options: [],
metrics: ["thickness": thickness],
views: ["left": left]))
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:|-(0)-[left]-(0)-|",
options: [],
metrics: nil,
views: ["left": left]))
borders.append(left)
}

if edges.contains(.Right) || edges.contains(.All) {
let right = border()
addSubview(right)
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:[right(==thickness)]-(0)-|",
options: [],
metrics: ["thickness": thickness],
views: ["right": right]))
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:|-(0)-[right]-(0)-|",
options: [],
metrics: nil,
views: ["right": right]))
borders.append(right)
}

if edges.contains(.Bottom) || edges.contains(.All) {
let bottom = border()
addSubview(bottom)
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("V:[bottom(==thickness)]-(0)-|",
options: [],
metrics: ["thickness": thickness],
views: ["bottom": bottom]))
addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat("H:|-(0)-[bottom]-(0)-|",
options: [],
metrics: nil,
views: ["bottom": bottom]))
borders.append(bottom)
}

return borders
}

P.S - 我已经要求原回答者在 Objective-C 中提供它,但他可能需要一些时间才能回复。我发布它的目的是,我只是想在这里得到一个更快的解决方案。

问候!

最佳答案

这应该有效。在 UIView 上创建一个类别然后你可以像这样使用它:

[self.scrollView addAutolayoutBorder:UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom
colour:[UIColor redColor]
thickness:2.0f];

这是类别:

.h

#import <UIKit/UIKit.h>

@interface UIView (AutoLayoutBorder) {

}

- (NSMutableArray *)addAutolayoutBorder:(UIRectEdge)edges
colour:(UIColor *)colour
thickness:(CGFloat)thickness;

@end

.m

#import "UIView+AutoLayoutBorder.h"

@implementation UIView (AutoLayoutBorder)

- (NSMutableArray *)addAutolayoutBorder:(UIRectEdge)edges
colour:(UIColor *)colour
thickness:(CGFloat)thickness {

NSMutableArray *borderViewsArray = [NSMutableArray new];

UIView * (^getBorder)(void) = ^UIView *{
UIView *borderView = [UIView new];
borderView.translatesAutoresizingMaskIntoConstraints = NO;
borderView.backgroundColor = colour;
return borderView;
};

if ((edges & UIRectEdgeTop) == UIRectEdgeTop || (edges & UIRectEdgeAll) == UIRectEdgeAll) {
UIView *top = getBorder();
[self addSubview:top];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[top(==thickness)]"
options:0
metrics:@{@"thickness" : @(thickness)}
views:@{@"top" : top}]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[top]-(0)-|"
options:0
metrics:nil
views:@{@"top" : top}]];
[borderViewsArray addObject:top];
}

if ((edges & UIRectEdgeLeft) == UIRectEdgeLeft || (edges & UIRectEdgeAll) == UIRectEdgeAll) {
UIView *left = getBorder();
[self addSubview:left];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[left(==thickness)]"
options:0
metrics:@{@"thickness" : @(thickness)}
views:@{@"left" : left}]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[left]-(0)-|"
options:0
metrics:nil
views:@{@"left" : left}]];
[borderViewsArray addObject:left];
}

if ((edges & UIRectEdgeRight) == UIRectEdgeRight || (edges & UIRectEdgeAll) == UIRectEdgeAll) {
UIView *right = getBorder();
[self addSubview:right];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[right(==thickness)]-(0)-|"
options:0
metrics:@{@"thickness" : @(thickness)}
views:@{@"right" : right}]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[right]-(0)-|"
options:0
metrics:nil
views:@{@"right" : right}]];
[borderViewsArray addObject:right];
}

if ((edges & UIRectEdgeBottom) == UIRectEdgeBottom || (edges & UIRectEdgeAll) == UIRectEdgeAll) {
UIView *bottom = getBorder();
[self addSubview:bottom];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[bottom(==thickness)]-(0)-|"
options:0
metrics:@{@"thickness" : @(thickness)}
views:@{@"bottom" : bottom}]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(0)-[bottom]-(0)-|"
options:0
metrics:nil
views:@{@"bottom" : bottom}]];
[borderViewsArray addObject:bottom];
}

return borderViewsArray;
}

@end

关于ios - 使用自动布局向 UIView 添加特定边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34507734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com