我在UILabel
中有一个UITableViewCell
,我想根据内容动态调整其字体和大小,以始终保持其可以支持的最大字体而不会被截断。我在大多数情况下都使用adjustsFontSizeToFitWidth
,但标签具有多余的垂直空间,
在iPhone SE模拟器上运行的此屏幕截图中,标签正确地将字体从55缩小到适合的大小,但是标签顶部有多余的空间。我希望那个空间消失!
这是我的标签代码:
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()
的各种呼叫,但它们都没有帮助。
答案 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
: