gpt4 book ai didi

ios - UIButton 在 iOS 9.3 上不显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:23:02 25 4
gpt4 key购买 nike

我有一个不只出现在 iOS 9.3 中的 UIButton。

我不明白为什么。谁能告诉我我做错了什么?

我需要 ViewDidAppear 方法中的按钮,因为我有一些其他布局元素需要在设置此按钮后放置。

iPhone 6 8.1 Button Settings Location: {{100, 100}, {42, 42}}

iPhone 6 9.3 Button Settings Location: {{0, 0}, {0, 0}}

iPhone 6Plus 8.1 Button Settings Location: {{100, 100}, {42, 42}}

iPhone 6Plus 9.3 Button Settings Location: {{0, 0}, {0, 0}}

#define MARGIN_SIZE  10
@interface HomeViewController ()
@property (weak, nonatomic) UIButton *btnSettings;
@end


- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

self.btnSettings = [UIButton buttonWithType:UIButtonTypeCustom];
self.btnSettings.userInteractionEnabled = YES;
self.btnSettings.frame = CGRectMake(100, 100, 42, 42);
self.btnSettings.tag = 21;
[self.btnSettings setImage:[UIImage imageNamed:@"settings_black"] forState:UIControlStateNormal];
[self.btnSettings addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.btnSettings];

NSLog(@"Button Settings Location: %@", NSStringFromCGRect(self.btnSettings.frame) );

}

最佳答案

iOS 8 和 9 之间的内存管理似乎有所不同。您的属性较弱。在调用 [self.view addSubview:self.btnSettings]; 将按钮添加为 subview 之前,它不会获得强引用。

似乎在 iOS 9 下,弱引用在调用到达之前被释放(并且属性设置为 nil)。但在 iOS 8 下,weak 属性会停留足够长的时间以达到该行,从而阻止它被释放。

简单的解决方案是使属性 strong 而不是 weak

另一种选择(感谢 Jef)是保留 weak 属性,但在 viewDidAppear 方法中使用局部变量。然后将局部变量添加为 subview 后,将局部变量赋值给属性。

另一个与您的代码无关的问题。如果此 View Controller 显示其他 View Controller ,则 viewDidAppear: 方法将被多次调用,最终您将添加多个按钮。要么将此代码移动到 viewDidLoad(它真正属于的地方),要么确保 viewDidAppear 中的代码在 View Controller 的生命周期内只被调用一次。

关于ios - UIButton 在 iOS 9.3 上不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154419/

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