• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

IOS - uibutton的动态放置

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:54:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个奇怪的问题:

我在 ViewDidLoad 或 ViewDidAppear 中动态设置一些按钮位置(都尝试过)并手动设置尺寸。然后,每当按下按钮时,我都会更改按钮的框架。但即使我设置了原始的 - 它们在屏幕上的位置不同,但它们看起来有点“向下移动了一些 px”。我附上代码和截图:

viewDidAppear :

    self.twoTeamsBtn = [[UIButton alloc] init];
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);
    self.threeTeamsBtn = [[UIButton alloc] init];
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), unselected3Image.size.width, unselected3Image.size.height);
    self.fourTeamsBtn = [[UIButton alloc] init];
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), unselected4Image.size.width, unselected4Image.size.height);

所以,twoTeams 的赔率为 94/2 (Y),而你的赔率为 132/2。两个图像的高度相同。 (selected2和selected3一样,unselected3和unselected3一样,以此类推)。

然后在我的点击方法中我有:

 if (button.tag == self.twoTeamsBtn.tag) {
   self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];

} else if (button.tag == self.threeTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (94/2), selected3Image.size.width, selected3Image.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2), self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (132/2), self.twoTeamsBtn.frame.size.width, self.twoTeamsBtn.frame.size.height);

    [self.threeTeamsBtn setImage:selected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:unselected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];

} else if (button.tag == self.fourTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (94/2), selected4Image.size.width, selected4Image.size.height);

    self.twoTeamsBtn.frame = CGRectMake(156/2, (132/2), self.twoTeamsBtn.frame.size.width, self.twoTeamsBtn.frame.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:unselected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:selected4Image forState:UIControlStateNormal];

}

截图如下:

button 2 selected button 3 selected button 3 selected

因此,如果您在第二张图片中看到,按钮 2 和按钮 4 不在同一级别,尽管它们的框架是相同的。在第三个中,2 和 3 处于同一水平。

比如原来的132/2,和后面的不一样。

我错过了什么吗?



Best Answer-推荐答案


感谢 TwoStraws,您可能已经找到了答案,但我认为问题在于您设置框架宽度/高度的方式

if (button.tag == self.twoTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), self.threeTeamsBtn.frame.size.width, self.threeTeamsBtn.frame.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2),  self.fourTeamsBtn.frame.size.width, self.fourTeamsBtn.frame.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];
} 

对于未选择的图像,您将框架设置为之前的任何图像,但如果选择/未选择的图像大小不同,则最后一个选择的图像(现在未选择的图像将关闭)。您需要根据您使用的图像设置帧大小。

if (button.tag == self.twoTeamsBtn.tag) {
    self.threeTeamsBtn.frame = CGRectMake(331/2, (132/2), unselected3Image.size.width, unselected3Image.size.height);
    self.fourTeamsBtn.frame = CGRectMake(505/2, (132/2),  unselected4Image.size.width, unselected4Image.size.height);
    self.twoTeamsBtn.frame = CGRectMake(156/2, (94/2), selected2Image.size.width, selected2Image.size.height);

    [self.threeTeamsBtn setImage:unselected3Image forState:UIControlStateNormal];
    [self.twoTeamsBtn setImage:selected2Image forState:UIControlStateNormal];
    [self.fourTeamsBtn setImage:unselected4Image forState:UIControlStateNormal];
} 

关于IOS - uibutton的动态放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34369917/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap