UIButton设置框架不起作用?

时间:2015-02-09 23:37:13

标签: objective-c uibutton

我为我的应用编写了以下代码:

self.PlayButton = [[UIButton alloc] init];

//Setup Play Button
[self.PlayButton setTranslatesAutoresizingMaskIntoConstraints:NO];
self.PlayButton.frame = CGRectMake(self.view.frame.size.width * 0.38, self.view.frame.size.height * 0.666, self.view.frame.size.width * 0.48, self.view.frame.size.height * 0.29);
[self.PlayButton setBackgroundImage:[UIImage imageNamed:@"PlayButton.png"] forState:UIControlStateNormal];
[self.PlayButton.layer setMagnificationFilter:kCAFilterNearest];
[self.PlayButton addTarget:self action:@selector(PlayButtonMethod) forControlEvents:(UIControlEvents)UIControlEventTouchUpInside]


[self.view addSubview:self.PlayButton];

但是当它运行此代码而不是出现在相当具体位置的图像时,它只会出现在视图的左上角。几乎就像它已经设置

self.PlayButton.frame = CGRectMake(0, 0, self.view.frame.size.width * 0.48, self.view.frame.size.height * 0.29);

这很奇怪,因为宽度和高度正确放入,但无论出于何种原因,CGRectMake设置的按钮位置都没有考虑在内。我已经做了一些关于在代码中创建UIButton的研究,而且我所看到的不仅仅是这个问题发生在其他人的代码编写完全负责。

任何帮助将不胜感激。     感谢

2 个答案:

答案 0 :(得分:1)

看起来我发现了修复: 删除这行代码为我解决了这个问题。

[self.PlayButton setTranslatesAutoresizingMaskIntoConstraints:NO];

不是100%肯定为什么这会导致问题,但它修复了它。

答案 1 :(得分:0)

使用标准UIButton方法创建alloc init时,实际上并未创建按钮。创建和初始化UIButton的方法称为buttonWithType:。如果您使用UIButton它将无法正常工作,则会创建指定类型的alloc init,请参阅Apple Documentation for UIButton

所以你需要换行

self.PlayButton = [[UIButton alloc] init];

self.PlayButton = [UIButton buttonWithType:UIButtonTypeCustom];

buttonWithType:允许您传入UIButtonType的枚举,以便它接受以下任何值:

  • UIButtonTypeCustom
  • UIButtonTypeSystem
  • UIButtonTypeDetailDisclosure
  • UIButtonTypeInfoLight
  • UIButtonTypeInfoDark
  • UIButtonTypeContactAdd
  • UIButtonTypeRoundedRect

如果你没有通过它UIButtonType按钮将不会被初始化,因为它不知道你想要什么类型的按钮,它不会假设。另请查看Apple Documentation for UIButtonType

旁注

我将把这个作为附注。还要读取Apple Coding Conventions Documentation,因为我注意到您使用大写字母来启动变量名称(即PlayButton)。变量名应以小写(即playButton)开头,而Class和Enum名称应以大写(即UIViewController)开头。遵守约定总是好的,因为它使您的代码更具可读性和可维护性,因此如果其他开发人员来修改您的代码,那么他们甚至自己都很容易阅读。