UIStackView 没有将自身对齐到中心?对象-c

Posted

技术标签:

【中文标题】UIStackView 没有将自身对齐到中心?对象-c【英文标题】:UIStackView isn't aligning itself to center? obj-c 【发布时间】:2017-03-11 18:23:37 【问题描述】:

编辑解决方案是将它们添加到垂直堆栈视图中,这要感谢下面提供该解决方案的用户!

所以我很新并且设法创建了一个 UIStackView,但它没有正确地在我的视图中居中(它与左侧对齐,我不知道如何修复它。)

这就是我的代码的样子,如果有人可以帮助我弄清楚 a) 为什么它没有跨越整个屏幕的宽度,或者 b) 我如何将 stackview 在屏幕上居中。

我一直在使用一种变通方法来通过将间距设置为等于剩余空间的任何值来伪造居中的外观,但我认为如果我可以将整个 UIStackView 居中,这将是不必要的

大部分代码都是一起破解的,所以我可能忽略了一些简单的东西? idk,会继续摆弄它,但也许在我这样做时,一组更有经验的眼睛可以看看它,我会很感激的

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(id)reuseIdentifier specifier:(id)specifier 

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier specifier:specifier];



    if (self) 
/*
     CGFloat width = [UIScreen mainScreen].bounds.size.width;
     CGFloat leftover = (width - (4 * 70)); //4 = number of buttons, 70 = width of buttons, is usually constant
     CGFloat newspacing = leftover/3; //3 is equal to total number of spacers needed
how i currently workaround the issue*/

//buttons declared here but omitted to save space

//Stack View
   UIStackView *stackView = [[UIStackView alloc] initWithFrame:self.bounds];
    [stackView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [stackView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
    stackView.axis = UILayoutConstraintAxisHorizontal;
    stackView.distribution = UIStackViewDistributionEqualSpacing;
    stackView.alignment = UIStackViewAlignmentCenter;
    stackView.spacing = 5;//newspacing; //fills up leftover space..

 [stackView addArrangedSubview:bugbutton];
 [stackView addArrangedSubview:paypalbutton];
 [stackView addArrangedSubview:btcbutton];
 [stackView addArrangedSubview:musicbutton];

 stackView.translatesAutoresizingMaskIntoConstraints = false;

 [self addSubview:stackView];




return self;

【问题讨论】:

您面临什么问题? @nikdange_me 很抱歉回复晚了,基本上我的单元格生成时与屏幕左侧对齐,而不是与中心对齐。我认为这与 self addSubview:stackView 部分有关,但我想知道如何将 stackview 设置为中心,我认为下面的评论者会有所帮助,尽管需要找到空闲时间来测试它 【参考方案1】:

您只是想在单元格中将堆栈视图居中吗?我不知道我是否确定你想要做什么。你可以用两种不同的方式来做。 编辑: 尝试嵌套堆栈视图以获得所需的布局。我希望我的语法正确。

UIStackView *stackView = [[UIStackView alloc] initWithFrame:self.bounds];

stackView.axis = UILayoutConstraintAxisHorizontal;
stackView.distribution = UIStackViewDistributionFillProportionally;
stackView.alignment = UIStackViewAlignmentCenter;
stackView.spacing = 5;//newspacing; //fills up leftover space..

[stackView addArrangedSubview:bugbutton];
[stackView addArrangedSubview:paypalbutton];
[stackView addArrangedSubview:btcbutton];
[stackView addArrangedSubview:musicbutton];




UIStackView *verticalstackView = [[UIStackView alloc] initWithFrame:self.bounds];
verticalstackView.axis = UILayoutConstraintAxisVertical;
verticalstackView.distribution = UIStackViewAlignmentFill;
verticalstackView.alignment = UIStackViewAlignmentCenter;

 vericalstackView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)

[verticalstackView addArrangedSubview:stackView];
[self addSubview:verticalstackView];

水平堆栈进入垂直堆栈,使其调整到中心。

【讨论】:

所以我想我想用第一种方法,但是当我用这段代码替换我当前的 uistackview 时,它仍然没有解决问题,我用描述问题的图像编辑了我的帖子(无论有没有你的代码看起来都一样),同时尝试第二个, 似乎第二个也没有成功 :( 我喜欢第一个建议,所以我会继续努力让它发挥作用 再试一次。我认为您必须嵌套它们才能在图像中获得所需的布局。 你有没有尝试过更新的答案。我最终测试了它并且它有效 刚刚得到它,以前不适合我,但我决定再试一次,因为我可能错过了编辑并且这次似乎成功了。不知道为什么我最初无法得到它,非常感谢您

以上是关于UIStackView 没有将自身对齐到中心?对象-c的主要内容,如果未能解决你的问题,请参考以下文章

将 UIStackView 视图动画化到中心

UIStackView 对齐问题

如何在水平 UIStackView 中对齐两个标签的底部?

如何将 3 个 html 表格并排对齐到中心

将ipywidget按钮对齐到中心

将按钮对齐到 div 的中心