gpt4 book ai didi

ios - 如何在动态类型的 UIContentSizeCategoryDidChangeNotification 后调整 View 大小

转载 作者:可可西里 更新时间:2023-11-01 05:11:28 25 4
gpt4 key购买 nike

我想在我的应用程序中采用动态类型,并且我希望它在运行时响应文本大小的变化,而无需重新启动应用程序(当我重新启动时,它会成功应用新的大小)。

我在我的应用委托(delegate)中实现了 UIContentSizeCategoryDidChangeNotification,并在 applicationDidBecomeActive: 上触发了一个通知,通知我的 View Controller 。在我的 View Controller 的处理程序方法中,我尝试过:

  • [self.view setNeedsDisplay];
  • [self.view setNeedsLayout];
  • [self.view invalidateIntrinsicContentSize];

但似乎都不起作用。它什么都不做。它在应用程序激活时被调用(命中断点),它确实会在最前面的 View 中被调用,但没有任何变化。

如何让我的应用在运行时动态响应类型变化?

最佳答案

首先,您的 UIViewController 需要观察 UIContentSizeCategoryDidChangeNotification 通知(您就是)。作为文档,我将举一个例子:

- (void)viewWillAppear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contentSizeCategoryDidChangeNotification:)
name:UIContentSizeCategoryDidChangeNotification
object:nil];
}

接下来,我们将定义我们的选择器,contentSizeCategoryDidChangeNotification:。这个函数是我们需要显式更新每个 UI 元素的地方(对于 UILabelUIButton 等)。简单地触发布局过程不会做到这一点。

例如,假设您有一个标签和按钮:

- (void)contentSizeCategoryDidChangeNotification {

// Updating a UILabel's size for a given text style:
self.headlineLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

// Similarly, updating a UIButton's size for a given style:
[self.button.titleLabel setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleBody]];

...
}

+ (UIFont)preferredFontForTextStyle: 将为给定的 text style 返回正确大小的 UIFont , 针对系统动态类型内容大小进行了调整(范围从 XSXXXL)。

最后,记得去掉自己的观察者身份:

[[NSNotificationCenter defaultCenter] removeObserver:self];

希望这对您有所帮助!

关于ios - 如何在动态类型的 UIContentSizeCategoryDidChangeNotification 后调整 View 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666451/

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