使用minimumScaleFactor缩放字体后,UILabel不调整大小

时间:2020-02-18 04:37:30

标签: ios swift autolayout uikit snapkit

我在UILabel中有一个UITableViewCell,我想根据内容动态调整其字体和大小,以始终保持其可以支持的最大字体而不会被截断。我在大多数情况下都使用adjustsFontSizeToFitWidth,但标签具有多余的垂直空间,

在iPhone SE模拟器上运行的此屏幕截图中,标签正确地将字体从55缩小到适合的大小,但是标签顶部有多余的空间。我希望那个空间消失!

Image

这是我的标签代码:

private lazy var label: UILabel = {
        let label = UILabel()
        label.font = .systemFont(ofSize: 55, weight: .ultraLight)
        label.adjustsFontSizeToFitWidth = true
        label.minimumScaleFactor = 0.25
        label.backgroundColor = .purple
        return label
    }()

这是我的布局代码:

self.addSubview(self.labelsContainerView)
self.labelsContainerView.snp.makeConstraints { (make) in
    make.leading.equalTo(leftView.snp.trailing).offset(20)
    make.trailing.equalTo(rightView.snp.leading).offset(-20)
    make.top.bottom.equalToSuperview()
}

self.labelsContainerView.addSubview(self.middleLabel)
self.middleLabel.snp.makeConstraints { (make) in
    make.leading.trailing.centerY.equalToSuperview()
}

self.labelsContainerView.addSubview(self.topLabel)
self.topLabel.snp.makeConstraints { (make) in
    make.leading.equalToSuperview()
    make.bottom.equalTo(self.middleLabel.snp.top)
    make.top.equalToSuperview().offset(8)
}

self.labelsContainerView.addSubview(self.bottomLabel)
self.bottomLabel.snp.makeConstraints { (make) in
    make.leading.equalToSuperview()
    make.top.equalTo(self.middleLabel.snp.bottom)
    make.bottom.equalToSuperview().offset(-8)
}

简而言之,我将UIView固定在UITableViewCell的顶部和底部。在该视图内,我有3个标签:顶部,中间和底部。标签从上到下固定。

我希望middleLabel始终是满足布局所需的最大尺寸,并使用适合该尺寸的最大字体而不会被截断。标签的字体更改时,似乎内在内容大小几乎没有更新。我尝试了对setNeedsLayout()layoutIfNeeded()的各种呼叫,但它们都没有帮助。

1 个答案:

答案 0 :(得分:1)

要更改标签的高度,还需要做一些额外的工作,但是如果您只需要使文本垂直居中,则可以将其添加到标签配置中:

const express = require('express');
const app = express();
const port = 3000;
const bodyPar=require('body-parser');
const session = require('express-session');
const path=require('path');
var user=["Jared","Bill","Jason","Jeremy"];


app.use(express.static('static'));
app.use(bodyPar.urlencoded({extended : true}));
app.use(bodyPar.json());
app.use(session({secret:'secret',saveUninitialized:true,resave:true}));
var sess;
var s;

app.get('/login', function(req, res) {
    res.sendFile(path.join(__dirname, '/templates/login.html'));
});

app.post('/login',function(req,res){
    var i=0;
    sess=req.session;

    var username=req.body.username;
    var pass=req.body.password;
    var but=req.body.value;
    s=0;
    sess.email=username;

    for(i=0;i<3;i++)
    {
        if(username==user[i])
        {
            s=s+1;
            i=5;
        }
    }
    if(pass="123")
        s=s+1;
    if(s==2)
        res.redirect('homepage');
    else
        res.redirect('login-error');



    res.end();
});

app.get('/homepage',function(req,res){
    res.sendFile(path.join(__dirname, '/templates/homepage.html'));
});

app.get('bios',function(req,res){
    res.sendFile(path.join(__dirname, '/templates/bios.html'));
});

app.get('login-error', function(req, res) {
    res.sendFile(path.join(__dirname, '/templates/login-error.html'));
});

app.post('/guest',function(req,res){
    sess=req.session;
    sess.username="Guest";
    s=2;
    res.redirect('homepage');
});

app.get('/logout',function(req,res){
    req.session.destroy(function(){
       res.redirect('login');  
       s=0;
    });

});
app.listen(port, () => console.log(`listening on port ${port}!`));

区别在于...顶部使用默认$rows = 6; // amount of rows $cols = 6; // amount of columns $rand_row = rand(1, 6); // random row $rand_col = rand(1, 6); // random column echo "<table border='1'>"; for($tr=1;$tr<=$rows;$tr++){ echo "<tr>"; for($td=1;$td<=$cols;$td++){ echo "<td>"; if($tr == $rand_row && $td == $rand_col) { // check for row and column echo "***BOMB***"; } echo "</td>"; } echo "</tr>"; } echo "</table>"; ,底部使用label.baselineAdjustment = .alignCenters

enter image description here