我有一个视图,其中有行和列的图像视图.

如果调整此视图的大小,我需要重新排列图像视图位置.

此视图是调整大小的另一个视图的子视图.

有没有办法检测到此视图何时调整大小?

推荐答案

正如Uli下面评论的那样,正确的方法是覆盖layoutSubviews并在那里布局imageView.

如果出于某种原因,你不能对layoutSubviews进行子类化和重写,那么观察bounds应该是可行的,即使它有点脏.更糟糕的是,观察存在风险——苹果不保证KVO在UIKit类上工作.阅读与苹果工程师的讨论:When does an associated object get released?

original answer:

您可以使用键值观察:

[yourView addObserver:self forKeyPath:@"bounds" options:0 context:nil];

并实施:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (object == yourView && [keyPath isEqualToString:@"bounds"]) {
        // do your stuff, or better schedule to run later using performSelector:withObject:afterDuration:
    }
}

Ios相关问答推荐

滑动以返回特定的 SwiftUI 视图

如何让我的 iOS 应用程序与 api 连接?

通过MatchedGeometryEffect向上滑动视图

使用swift将图像转换为A4大小的pdf

Apple Push Service 证书不受信任

SwiftUI NavigationView navigationBarTitle LayoutConstraints 问题

UITableView 行动画持续时间和完成回调

iOS13状态栏背景 colored颜色 与大文本模式下的导航栏不同

在 SwiftUI 中查找 Image(systemName:) 的所有可用图像

文本未包含在 swift UI 中

在 SwiftUI 中使 VStack 填充屏幕的宽度

Flutter:如何在代码中的每个列表项之间添加分隔符?

编译器无法对这个表达式 swift 4 进行类型判断?

6.5" 显示器的应用store 屏幕截图大小是多少?

缺少营销图标

如何确定 WKWebView 的内容大小?

“项目名称”是经过优化编译的 - 步进可能会表现得很奇怪;变量可能不可用

远程推送通知是否需要在 Info.plist 中添加 UIBackgroundModes?

如何在 Xcode 9 中使用 iOS 11、Apple TV 4K 等进行无线调试?

DispatchQueue.main.async 和 DispatchQueue.main.sync 之间的区别