Xcode:以编程方式创建的按钮出现在模拟器上,但不出现在实际的手机上

时间:2015-02-02 11:12:12

标签: ios iphone

正如它在锡上所说的那样。我正在更新应用以支持iOS 8+。 AFAIK,这在iOS 7上运行良好。在模拟器(iOS 7或8)中也可以使用。

以下是viewDidLoad中其中一个按钮的代码:

memberButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
memberButton.frame = CGRectMake(20, screenHeight - 50, 133, 24);
[memberButton setBackgroundColor:[UIColor colorWithRed:70.0/255.0 green:70.0/255.0 blue:70.0/255.0 alpha:1]];
[memberButton setBackgroundImage:[UIImage imageNamed:@"Member.png"] forState:UIControlStateNormal];
[memberButton setTintColor:[UIColor whiteColor]];
[memberButton addTarget:self action:@selector(memberButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:memberButton];

memberButton.hidden = NO;
memberButton.enabled = YES;

在手机上运行应用程序时,无法找到该按钮。显然,该应用程序上的内容远远多于单个按钮;你可以滚动一个图像。这可能是负责任的吗?

以下是广告样式滚动图像的代码:

pgCtr = [[UIPageControl alloc] initWithFrame:CGRectMake(160, screenHeight - 70, 0, 0)];
[pgCtr setTag:0];
pgCtr.numberOfPages=3;
pgCtr.autoresizingMask=UIViewAutoresizingNone;
[self.view addSubview:pgCtr];

for (int i=1; i<=3; i++) {
    pgCtr.currentPage = i;
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"intro_%d.jpg",i]];
    UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake((i-1)*scr.frame.size.width, 0, scr.frame.size.width, scr.frame.size.height)];
    imgV.contentMode=UIViewContentModeScaleToFill;
    [imgV setImage:image];
    imgV.tag=i+1;
    [scr addSubview:imgV];
}

[scr setContentSize:CGSizeMake(scr.frame.size.width*3, scr.frame.size.height)];
pgCtr.currentPage = 0;
pgCtr.currentPageIndicatorTintColor = [UIColor whiteColor];
pgCtr.pageIndicatorTintColor = [UIColor grayColor];

我尝试的事情(最新的粗体):

  • 将CGRectMake(20,screenHeight - 50,133,24)设置为静态值。
  • 将滚动视图代码放在按钮代码上方。
  • 评论整个滚动视图。
  • 输出member.frame.origin.x和.y。在模拟器中,两者都返回值。在手机中,均返回0.00000。

没有显示按钮。

6 个答案:

答案 0 :(得分:2)

请执行以下步骤 * ,了解iOS8和设备或代码中的实际问题/位置。

  1. 不要使用动态帧检查,只需使用静态帧来显示按钮。对于例如CGRectMake(0,0,300,100)

  2. 如果步骤1显示按钮,那么帧计算中肯定会出现问题。

  3. 如果步骤1不起作用,请为该视图中的所有其他控件添加边框,并检查它是否位于按钮上方?

  4. * @Zack,只有你能找到问题的答案,因为我们可以给你一些建议而不是解决方案,因为我们无权访问你的项目。最好的方法是针对每种情况继续进行反复试验。

答案 1 :(得分:1)

我想你错过了

 [self.view addSubview: memberButton];

答案 2 :(得分:1)

我建议不要在-viewDidLoad设置视图帧。该方法仅在UIViewController生命周期中调用一次。好的做法是将-viewDidLoad的子视图初始化为CGRectZero作为框架,并以-viewWillLayoutSubviews方法更新框架。

看起来像这样:

- (void)viewDidLoad {
   [super viewDidLoad];
   //
   pgCtr = [[UIPageControl alloc] initWithFrame:CGRectZero];
   /* setting properties */
}

- (void)viewWillLayoutSubviews {
   CGRect screenRect = [[UIScreen mainScreen] bounds];
   CGFloat screenWidth = screenRect.size.width;
   CGFloat screenHeight = screenRect.size.height;
   //
   memberButton.frame = CGRectMake(20, screenHeight - 50, 133, 24);
   //
   pgCtr.frame = CGRectMake(160, screenHeight - 70, 0, 0);
   // same for contentSize
}

尝试在-viewWillLayoutSubviews处移动框架设置并检查问题是否仍然存在。也许这个小提示会有所帮助。

此致 阿尔乔姆

答案 3 :(得分:0)

检查滚动视图是否位于按钮顶部。更改按钮的位置,看它是否仍在那里。

答案 4 :(得分:0)

导航栏可能会弄乱您的按钮。只是尝试一下,尝试将框架设置为memberButton.frame = CGRectMake(20,screenHeight - 50 -64,133,24);

之前发生在我身上。

答案 5 :(得分:0)

我咬紧牙关,决定在故事板上添加按钮,并重新编写一些代码。令我惊讶的是,按钮终于出现了。

至于为什么我之前没有这样做,好吧,有一个很多的按钮。还有一个很多的按钮视图控制器。并且以编程方式添加所有。考虑到项目的规模,我无法独自完成这些工作,但我认为展示一些东西比什么都没有好。

所以这更像是创可贴,而不是实际的解决方案。现在,它会这样做。如果有其他人最终弄明白,那么代码就不会浪费,不要犹豫回答。