gpt4 book ai didi

ios - UIStackView 和 subview 大小类

转载 作者:行者123 更新时间:2023-12-01 18:09:59 29 4
gpt4 key购买 nike

我有一个 UIStackView,其中中间按钮仅在不同大小的类别中可见 storyboard view

旋转设备后,按钮将因其尺寸类别而可见,并且也位于右 View 层次结构(图像)中,但没有 UIstackview 给出的足够约束来正确定位,它位于左上角角(标签中间)。

not enough constraints

工作按钮(不受尺寸类别更改的影响)有更多限制。

这是一个错误还是我遗漏了一些东西。有人知道解决方法吗?

最佳答案

这绝对是 iOS 中的一个错误。安装中间按钮后,它将被添加为堆栈 View 的 subview ,而不是作为排列 subview 。

这是一个解决方法。将中间按钮的自定义类设置为StackViewBugFixButton。然后将中间按钮的(新)priorView 导出连接到左侧的下一个按钮。以下是 StackViewBugFixButton 的定义:

StackViewBugFixButton.h

#import <UIKit/UIKit.h>

@interface StackViewBugFixButton : UIButton

@property (nonatomic, weak) IBOutlet UIView *priorSibling;

@end

StackViewBugFixButton.m

#import "StackViewBugFixButton.h"

@implementation StackViewBugFixButton

- (void)didMoveToSuperview {
[super didMoveToSuperview];
[self putIntoArrangedSubviewsIfNeeded];
}

- (void)putIntoArrangedSubviewsIfNeeded {
if (![self.superview isKindOfClass:[UIStackView class]]) {
return;
}

if (self.priorSibling == nil) {
NSLog(@"%@ %s You forgot to hook up my priorSibling outlet.", self, __func__);
return;
}

UIStackView *stackView = (UIStackView *)self.superview;
if ([stackView.arrangedSubviews indexOfObject:self] != NSNotFound) {
return;
}

NSUInteger priorSiblingIndex = [stackView.arrangedSubviews indexOfObject:self.priorSibling];
if (priorSiblingIndex == NSNotFound) {
NSLog(@"%@ %s My priorSibling isn't in my superview's arrangedSubviews.", self, __func__);
return;
}

[stackView insertArrangedSubview:self atIndex:priorSiblingIndex + 1];
}

@end

您将收到一个虚假警告“您忘记连接我的 previousSibling socket ”,因为在加载期间,在连接其 socket 之前,该 View 被添加为堆栈 View 的 subview 。

关于ios - UIStackView 和 subview 大小类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526455/

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