首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS无法在UITableViewCell中更改标签的X位置

iOS无法在UITableViewCell中更改标签的X位置
EN

Stack Overflow用户
提问于 2020-10-23 02:24:46
回答 1查看 18关注 0票数 0

下面,左侧的标签和右侧的开关以编程方式出现在TableViewCell中。我可以使用以下命令控制开关的X位置:

代码语言:javascript
复制
switchControl.rightAnchor.constraint(equalTo: rightAnchor, constant: -20).isActive = true

但左侧标签的可比指令什么也不做,它始终停留在默认的左手位置。

代码语言:javascript
复制
 labelControl.leftAnchor.constraint(equalTo: leftAnchor, constant: 100).isActive = true

我是否必须声明标签的宽度,而开关是已知的?

代码语言:javascript
复制
    lazy var labelControl: UILabel = {
        let labelControl = UILabel()
        labelControl.translatesAutoresizingMaskIntoConstraints = false
        return labelControl
    }()
    
    lazy var switchControl: UISwitch = {
        let switchControl = UISwitch()
        switchControl.isOn = true
        switchControl.onTintColor = UIColor.orange
        switchControl.translatesAutoresizingMaskIntoConstraints = false
        switchControl.addTarget(self, action: #selector(handleSwitchAction), for: .valueChanged)
        return switchControl
    }()
    
    
    // MARK: - Init
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        addSubview(labelControl)
        labelControl.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
        labelControl.leftAnchor.constraint(equalTo: leftAnchor, constant: 100).isActive = true
        addSubview(switchControl)
        switchControl.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
        switchControl.rightAnchor.constraint(equalTo: rightAnchor, constant: -20).isActive = true
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 03:12:19

您的代码正在尝试添加多个相同的锚点约束。您可能会在调试控制台中收到一个自动布局警告来解释这一点。

您需要创建一个约束,然后可以对其进行修改:

代码语言:javascript
复制
lazy var labelControl: UILabel = {
    let labelControl = UILabel()
    labelControl.translatesAutoresizingMaskIntoConstraints = false
    return labelControl
}()

lazy var switchControl: UISwitch = {
    let switchControl = UISwitch()
    switchControl.isOn = true
    switchControl.onTintColor = UIColor.orange
    switchControl.translatesAutoresizingMaskIntoConstraints = false
    switchControl.addTarget(self, action: #selector(handleSwitchAction), for: .valueChanged)
    return switchControl
}()

// add these vars
var labelControlLeftAnchor: NSLayoutConstraint!
var switchControlRightAnchor: NSLayoutConstraint!

// MARK: - Init

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    addSubview(labelControl)
    labelControl.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
    //labelControl.leftAnchor.constraint(equalTo: leftAnchor, constant: 100).isActive = true

    // create labelControlLeftAnchor
    labelControlLeftAnchor = labelControl.leftAnchor.constraint(equalTo: leftAnchor, constant: 100)
    labelControlLeftAnchor.isActive = true
    
    addSubview(switchControl)
    switchControl.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
    //switchControl.rightAnchor.constraint(equalTo: rightAnchor, constant: -20).isActive = true

    // create switchControlRightAnchor
    switchControlRightAnchor = switchControl.rightAnchor.constraint(equalTo: rightAnchor, constant: -20)
    switchControlRightAnchor.isActive = true
    
}

现在,您可以更改.constant值以“移动”对象:

代码语言:javascript
复制
// for example
labelControlLeftAnchor.constant = 40
switchControlRightAnchor.constant = -40
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64488365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档