Ios 自定义UIView屏幕中不显示UILabel
下面是我如何实现自定义UiView的 在myView.h文件中Ios 自定义UIView屏幕中不显示UILabel,ios,objective-c,iphone,uiview,uilabel,Ios,Objective C,Iphone,Uiview,Uilabel,下面是我如何实现自定义UiView的 在myView.h文件中 @interface myView : UIView { NSString *message; } ... @property (nonatomic, retain) UILabel *messageLabel; ... @end 在myView.m文件中 @interface myView : UIView { NSString *message; } ... @property (nonatomic, reta
@interface myView : UIView
{
NSString *message;
}
...
@property (nonatomic, retain) UILabel *messageLabel;
...
@end
在myView.m文件中
@interface myView : UIView
{
NSString *message;
}
...
@property (nonatomic, retain) UILabel *messageLabel;
...
@end
此函数将实例化myView并向其添加消息标签
+ (id) initWithText:(NSString *) text
{
screenBounds = [[UIScreen mainScreen] bounds];
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
self = [super initWithFrame:CGRectMake(0, statusBarFrame.size.height, screenBounds.size.width, 40)];
if (self)
{
[self setBackgroundColor:[UIColor redColor]];
message = [text copy];
_messageLabel = [[UILabel alloc]initWithFrame:[self frame]];
[_messageLabel setText:message];
[_messageLabel setAdjustsFontSizeToFitWidth:YES];
[_messageLabel setTextAlignment:NSTextAlignmentJustified];
[_messageLabel setTextColor:[ UIColor blackColor]];
[self addSubview:_messageLabel];
}
return self;
}
稍后,我将myView作为子类添加到屏幕中的可见视图中。当我运行应用程序时,我可以看到红色的myView,但其中没有显示消息标签。检查您在标签中设置的文本是否为空,以及
_messageLabel = [[UILabel alloc]initWithFrame:self.frame];
检查您在标签中设置的文本是否为空,以及
_messageLabel = [[UILabel alloc]initWithFrame:self.frame];
当你用Self.Frimit输入你的uIabell时,你必须考虑它父视图中的值。
也许您的第二个参数:y=statusBarFrame.size.height太高了,这就是为什么您的标签不在视图中尝试用CGRectMake(0. 0,Self.Frask.Wrand,Field.Frase.Health.
>P>)输入您的标签。当您用Self.Frimit输入UIababl时,必须考虑父视图中的值。 也许您的第二个参数:y=statusBarFrame.size.height太高了,这就是为什么您的标签不在视图中试着用CGRectMake(0,0,self.frame.width,self.frame.height)初始化标签。我试过这段代码,它成功了。确定没有在其他地方为UILabel设置其他参数?以下是与代码的区别:
- 对于方法,我将您的“+”替换为“-”李>
- 我更改了uilabel框架以进行初始化李>
- 为标签添加背景色(仅用于检查)
- 对于方法,我将您的“+”替换为“-”李>
- 我更改了uilabel框架以进行初始化李>
- 为标签添加背景色(仅用于检查)
backgroundOP.m
文件中调用initWithText()
和show()
。这些函数总是在单独的线程中执行
现在:我将调用移动到委托方法中的initWithText()
&show()
方法,并将委托添加到呈现UIViewController,即我希望视图显示在其中的viewController.m文件中。现在我从另一个文件(即从backgroundOP.m
)调用这个委托,问题就解决了。现在,UIView
和UILabel
都可以在屏幕上看到
但是我不明白为什么从后台线程函数添加UIView只显示UIView而不显示其内容/子视图
在我的show()函数中,我使用这个调度队列将myView添加到显示键窗口。像下面的代码
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
dispatch_async(dispatch_get_main_queue(), ^{
[window addSubview:self]; // self represents myView object
});
如果有人知道这种行为的原因,请告诉我。以前:我曾经在执行后台操作的
backgroundOP.m
文件中调用initWithText()
&show()
。这些函数总是在单独的线程中执行
现在:我将调用移动到委托方法中的initWithText()
&show()
方法,并将委托添加到呈现UIViewController,即我希望视图显示在其中的viewController.m文件中。现在我从另一个文件(即从backgroundOP.m
)调用这个委托,问题就解决了。现在,UIView
和UILabel
都可以在屏幕上看到
但是我不明白为什么从后台线程函数添加UIView只显示UIView而不显示其内容/子视图
在我的show()函数中,我使用这个调度队列将myView添加到显示键窗口。像下面的代码
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
dispatch_async(dispatch_get_main_queue(), ^{
[window addSubview:self]; // self represents myView object
});
如果有人知道这种行为的原因,请告诉我。标签很可能没有正确的位置或大小。您在哪里使用文本调用initWithText?尝试在UILabel初始化中将[self frame]更改为[self bounds]。@Suryasubenthian我尝试了
[self bounds]
即使这样,它也不会显示标签。仅显示红色背景视图visible@beyowulf我从另一个文件调用initWithText。我使用[[myView alloc]initWithText:@“我的消息”]show]来调用它代码>。show函数会将视图添加到窗口中,因为我可以在屏幕中看到我的视图,但只有UiLabel没有显示在窗口中。标签很可能没有正确的位置或大小。您在哪里调用initWithText?尝试在UiLabel初始化中将[self frame]更改为[self bounds]。@Suryasubenthian我尝试了[self bounds]
即使这样,它也不会显示标签。仅显示红色背景视图visible@beyowulf我从另一个文件调用initWithText。我使用[[myView alloc]initWithText:@“我的消息”]show]来调用它代码>。show函数将把视图添加到窗口中,这样我就可以在屏幕上看到我的视图,但只有UiLabel没有显示在窗口中。我也在运行时检查过。标签未设置为空白。消息是NSString,它正确地包含该字符串。我也尝试了self.frame,但它没有显示标签。尝试同时硬编码[u messageLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,0,20,20)]_messageLabel.text=@“asd”;我试过了,但是没有显示出来。我也尝试过改变文本颜色,但没有效果。我也在运行时检查过。标签未设置为空白。消息是NSString,它正确地包含该字符串。我也尝试了self.frame,但它没有显示标签。尝试同时硬编码[u messageLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,0,20,20)]_messageLabel.text=@“asd”;我试过了,但是没有显示出来。我也尝试过更改文本颜色,但没有效果。开始时我使用的是CGRectMake(0,0,self.frame.width,self.frame.height)
,但后来我认为超出了边界,所以我将其替换为[self-frame]代码>。当[自帧]