gpt4 book ai didi

ios - UILabel 导致应用程序在添加到 View 时崩溃(仅限 Xcode 6 和 iOS 8)

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

我已将我的项目转换到 Xcode 6 以便为 iOS 8 构建。但是,一个特定的 UILabel 导致应用程序在添加到 View 层次结构时崩溃。这是我收到的唯一错误日志:

-[MyViewController _contentInsetsFromFonts]: unrecognized selector sent to instance     0x16d90da0

我无法在项目的任何位置找到 contentInsetsFromFonts 方法。此外,我什至无法在网上的任何地方找到它的引用资料,包括 Apple 的文档。我没有为此 UIViewController 使用 NIB,因此 UI 是在 loadView 方法中构建的:

- (void)loadView {
UIImage *trackImage = [UIImage imageNamed:@"sliderTrack.png"];
sliderBackground = [[UIImageView alloc] initWithImage:trackImage];
UIView *view = [[UIView alloc] initWithFrame:sliderBackground.frame];
[view addSubview:sliderBackground];

slider = [[UISlider alloc] initWithFrame:sliderBackground.frame];
CGRect sliderFrame = slider.frame;
sliderFrame.size.width -= 46;
slider.frame = sliderFrame;
slider.center = sliderBackground.center;
slider.backgroundColor = [UIColor clearColor];
[slider setMinimumTrackImage:[UIImage imageNamed:@"sliderMaxMinTrackImage.png"] forState:UIControlStateNormal];
[slider setMaximumTrackImage:[UIImage imageNamed:@"sliderMaxMinTrackImage.png"] forState:UIControlStateNormal];
UIImage *thumbImage = [UIImage imageNamed:@"cancel-slider.png"];
[slider setThumbImage:thumbImage forState:UIControlStateNormal];
slider.minimumValue = 0.0;
slider.maximumValue = 1.0;
slider.continuous = YES;
slider.value = 0.0;

// Set the slider action methods
[slider addTarget:self
action:@selector(sliderUp:)
forControlEvents:UIControlEventTouchUpInside];
[slider addTarget:self
action:@selector(sliderDown:)
forControlEvents:UIControlEventTouchDown];
[slider addTarget:self
action:@selector(sliderChanged:)
forControlEvents:UIControlEventValueChanged];

NSString *labelText = @"label text";
UIFont *labelFont;
NSString *osVersion = [[UIDevice currentDevice] systemVersion];
if ([osVersion floatValue] >= 7.0) {
labelFont = [UIFont systemFontOfSize:22.0];

} else {
labelFont = [UIFont systemFontOfSize:24.0];
}

CGSize labelSize = [labelText sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:labelFont, NSFontAttributeName, nil]];

label = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, labelSize.width, labelSize.height)];

CGFloat labelHorizontalCenter = slider.center.x + (thumbImage.size.width / 2);
label.center = CGPointMake(labelHorizontalCenter, slider.center.y);

// Set other label attributes and add it to the view
label.textColor = [UIColor whiteColor];
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = [UIColor clearColor];
label.font = labelFont;
label.text = labelText;

[view addSubview:label];

[view addSubview:slider];

label.layer.delegate = self;

self.view = view;
}

应用程序不会在 [view addSubview:label] 处崩溃;它在 loadView 方法返回后崩溃。

最佳答案

来自 the UIView documentation :

Never change the delegate of this layer object.

删除这一行:

label.layer.delegate = self;

无论您想在这里完成什么,都需要以另一种方式完成。

关于ios - UILabel 导致应用程序在添加到 View 时崩溃(仅限 Xcode 6 和 iOS 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891260/

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