抱歉,我真的不知道原生 iOS 设计是如何工作的(我通常做 Xamarin Forms 设计)。
我有 UIStackView
UIStackView stackView = new UIStackView(new CGRect(0, 0, View.Frame.Width, View.Frame.Height));
然后我创建 UILabel
,设置 AdjustsFontSizeToFitWidth = true
因为我需要自动调整字体大小
之后我对其应用一些旋转 targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270/180.0));
因为我需要制作垂直文本。
然后我将这个标签添加到堆栈中。当然我还有其他一些设置,但我认为它们并不重要。
我的最后一步是为具有固定宽度的 UILabel
设置新的 Frame
。我尝试通过获取堆栈的高度来设置宽度,我什至尝试将其设置为常量,但它不起作用。标签的宽度总是看起来像自动。
这就是我想要的:
但实际上,目标标签很小。
完整代码在这里:(注意这是 TodayExtension)
[Register("CodeBasedViewController")]
public class CodeBasedViewController : SLComposeServiceViewController, INCWidgetProviding
{
UIImage image;
private UILabel otherLabel;
private UILabel targetLabel;
public CodeBasedViewController(IntPtr handle) : base(handle)
{
}
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
UIStackView stackView = new UIStackView(new CGRect(0, 0, View.Frame.Width, View.Frame.Height));
View.AddSubview(stackView);
stackView.Axis = UILayoutConstraintAxis.Horizontal;
image = new UIImage("picture.png");
UIImageView imageView = new UIImageView(image)
{
ContentMode = UIViewContentMode.ScaleAspectFit
};
otherLabel = new UILabel
{
TextColor = UIColor.White,
Text = "someTextA",
Font = UIFont.SystemFontOfSize(40)
};
targetLabel = new UILabel
{
TextColor = UIColor.Black,
Text ="4",
TextAlignment = UITextAlignment.Left,
Font = UIFont.SystemFontOfSize(30),
AdjustsFontSizeToFitWidth = true,
Lines = 1
};
targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270 / 180.0));
stackView.AddArrangedSubview(imageView);
stackView.AddArrangedSubview(otherLabel);
stackView.AddArrangedSubview(targetLabel);
stackView.Frame = new CGRect(View.Frame.Width / 2, 0,
otherLabel .IntrinsicContentSize.Width +
targetLabel.IntrinsicContentSize.Width +
View.Frame.Height
, View.Frame.Height);
stackView.Center = View.Center;
targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150); //test constants
}
public void WidgetPerformUpdate(Action<NCUpdateResult> completionHandler)
{
completionHandler(NCUpdateResult.NewData);
}
}
最佳答案
首先,设置StackView的Distribution
属性
stackView.Distribution = UIStackViewDistribution.Fill;
同时不要忘记设置标签的字体
targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150);
targetLabel.Font = UIFont.SystemFontOfSize(80);
下面是完整的代码,我设置的框架只是为了测试,你可以根据需要设置框架(如果你想设置等于屏幕大小,你应该同时设置标签和 ImageView 的框架).
UIStackView stackView = new UIStackView(new CGRect(100,200,300,150));
View.AddSubview(stackView);
stackView.Distribution = UIStackViewDistribution.Fill;
stackView.Spacing = 10;
stackView.BackgroundColor = UIColor.LightGray;
stackView.Axis = UILayoutConstraintAxis.Horizontal;
UIImageView imageView = new UIImageView()
{
ContentMode = UIViewContentMode.ScaleAspectFit,
BackgroundColor = UIColor.Red
};
otherLabel = new UILabel
{
TextColor = UIColor.Black,
Text = "someTextA",
Font = UIFont.SystemFontOfSize(40)
};
targetLabel = new UILabel
{
TextColor = UIColor.Black,
Text = "4",
TextAlignment = UITextAlignment.Left,
Font = UIFont.SystemFontOfSize(100),
AdjustsFontSizeToFitWidth = true,
Lines = 0
};
targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270 / 180.0));
stackView.AddArrangedSubview(imageView);
stackView.AddArrangedSubview(otherLabel);
stackView.AddArrangedSubview(targetLabel);
stackView.Center = View.Center;
targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150);
关于c# - 旋转 UILabel 的拉伸(stretch)宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025432/