如何在标准UITableViewCell中以编程方式自动执行Autolayout以获取右侧的自定义UIButton。

时间:2017-03-16 04:42:11

标签: ios objective-c uitableview uibutton autolayout

首先,我要以编程方式解决这个布局问题,而不是在故事板中解决这个问题,因为我已经通过编码来定义我的按钮而不是拖拽和放大。通过故事板删除,

我编写了通用iOS应用程序,其中我很少使用TableView。我要在每个UITableViewCell右边添加一些自定义按钮,或者你可以说我要在单元格的trailing边缘添加按钮,它在模拟器的iPhone7 Plus中工作得非常好,但是那么iphone 5或5s&其他iOS设备?这是它在iphone7 Plus& iphone 5s

enter image description here

我应该在我的程序(代码)中对布局做什么样的审核,这是我在UITableViewCell方法中用于在cellForRowAtIndexPath方法中定义4个按钮的代码,

//Favorite Button

    UIButton *addtoFavsButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [addtoFavsButton setImage:[UIImage imageNamed:@"like"] forState:UIControlStateNormal];
    addtoFavsButton.frame = CGRectMake(370.0f, 0.0f, 50.0f, 45.0f); 
    [cell addSubview:addtoFavsButton];
    [addtoFavsButton addTarget:self
                        action:@selector(addtoFavs:)
              forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:addtoFavsButton];
    [addtoFavsButton setTag:indexPath.row];

// WebView Button

UIButton *webViewButton = [UIButton buttonWithType:UIButtonTypeCustom];
[webViewButton setImage:[UIImage imageNamed:@"web"] forState:UIControlStateNormal];
webViewButton.frame = CGRectMake(335.0f, 0.0f, 50.0f, 50.0f);
[cell addSubview:webViewButton];
[webViewButton addTarget:self
                  action:@selector(webView:)
        forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:webViewButton];
[webViewButton setTag:indexPath.row];


// Twitter Share Button

UIButton *twitterButton = [UIButton buttonWithType:UIButtonTypeCustom];
[twitterButton setImage:[UIImage imageNamed:@"twitter"] forState:UIControlStateNormal];
twitterButton.frame = CGRectMake(300.0f, 0.0f, 45.0f, 42.0f);
[cell addSubview:twitterButton];
[twitterButton addTarget:self action:@selector(twitterShare:event:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:twitterButton];
//[twitterButton setTag:indexPath.row];


// Facebook Share Button

UIButton *facebookButton = [UIButton buttonWithType:UIButtonTypeCustom];
[facebookButton setImage:[UIImage imageNamed:@"facebook"] forState:UIControlStateNormal];
facebookButton.frame = CGRectMake(265.0f, 0.0f, 45.0f, 42.0f);
[cell addSubview:facebookButton];
[facebookButton addTarget:self
                   action:@selector(facebookShare:event:)
         forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:facebookButton];

建议我如何编程自动布局这些按钮,以便在任何iOS设备中从右侧开始调整所有按钮。

2 个答案:

答案 0 :(得分:1)

您正在设置这些按钮的框架,这样无论设备的宽度如何,按钮都会将自身置于其框架变量中定义的(x,y)坐标中。因此,您必须为这些按钮添加自动布局约束,以便在所有设备中正确获得所需的设计。

使用NSLayoutConstraint对象创建所需的自动布局约束,并将其添加到按钮。 请参阅此链接:

http://www.tutorialspoint.com/ios/ios_auto_layouts.htm

答案 1 :(得分:1)

如果您没有使用自动布局,请按照我的回答

<强>步骤1

创建一个用于定义设备宽度的宏

#define WidthCalculation self.view.frame.size.width

<强>步骤2

最初为addtoFavsButton设置框架,它会自动调整屏幕宽度

addtoFavsButton.frame = CGRectMake(WidthCalculation - 60, 0.0f, 50.0f, 45.0f);

此后根据addtoFavsButton

计算其他按钮
webViewButton.frame = CGRectMake(WidthCalculation - (addtoFavsButton.frame.origin.x + 50.0f +10), 0.0f, 50.0f, 50.0f);