gpt4 book ai didi

ios - 在 View 中均匀分布空间,没有边距

转载 作者:行者123 更新时间:2023-11-29 10:32:21 26 4
gpt4 key购买 nike

我使用以下函数在一个 View 中隔开动态数量的 View (使用自动布局):

-(NSArray*)spaceViews:(NSArray *)views onAxis:(UILayoutConstraintAxis)axis
{
NSAssert([views count] > 1,@"Can only distribute 2 or more views");

NSLayoutAttribute attributeForView;
NSLayoutAttribute attributeToPin;

switch (axis) {
case UILayoutConstraintAxisHorizontal:
attributeForView = NSLayoutAttributeCenterX;
attributeToPin = NSLayoutAttributeRight;
break;
case UILayoutConstraintAxisVertical:
attributeForView = NSLayoutAttributeCenterY;
attributeToPin = NSLayoutAttributeBottom;
break;
default:
return @[];
}

CGFloat fractionPerView = 1.0 / (CGFloat)([views count] + 1);

NSMutableArray *constraints = [NSMutableArray array];
[views enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop)
{
CGFloat multiplier = fractionPerView * (idx + 1.0);
[constraints addObject:[NSLayoutConstraint constraintWithItem:view
attribute:attributeForView
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:attributeToPin
multiplier:multiplier
constant:0.0]];
}];

[self addConstraints:constraints];
return [constraints copy];
}

(函数来自UIView-Autolayout)

问题是它有边距。如何更改此方法以均匀地间隔 View 而没有边距?

更新

似乎该方法毕竟无法正常工作,外部项目的边距比其余项目高得多。

例如,我将左臂的代码更改为:

self.leftArm = [UIView autoLayoutView];
self.leftArm.backgroundColor = [UIColor grayColor];

[self.view addSubview:self.leftArm];

[self.leftArm pinAttribute:NSLayoutAttributeRight toAttribute:NSLayoutAttributeLeft ofItem:self.body withConstant:-10.0];
[self.leftArm pinAttribute:NSLayoutAttributeTop toSameAttributeOfItem:self.body withConstant:10.0];
[self.leftArm constrainToSize:CGSizeMake(20.0, 200.0)];

现在机器人看起来像这样:

enter image description here

请注意,左臂的 View 分布不均匀,顶部和底部的边距要高得多。我可以水平重现相同的行为并且使用更少的项目。

我已经通过将外部 View 与父 View 的两侧对齐并将其余部分对齐到两者之间的空间,成功地去除了边距。但是现在,由于这个问题,我总是在外部 View 和它们旁边的 View 之间留出更大的空间。

有谁知道如何解决这个问题?

更新 2

我创建了一个 fork 并向其添加了我的功能,我还扩展了机器人示例,以便您明白我的意思。

take a look .

最佳答案

看起来好像这段代码来自UIView-Autolayout .最新版本的库有一个新方法,可以让你停止将间距添加到边缘:

-(NSArray*)spaceViews:(NSArray*)views
onAxis:(UILayoutConstraintAxis)axis
withSpacing:(CGFloat)spacing
alignmentOptions:(NSLayoutFormatOptions)options
flexibleFirstItem:(BOOL)flexibleFirstItem
applySpacingToEdges:(BOOL)spaceEdges;

只需调用此方法并将 NO 传递给最后一个参数即可。

关于ios - 在 View 中均匀分布空间,没有边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983492/

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