我有一个iOS窗口应用程序,直到今天它与Xcode一起工作正常.
当我在对象库中打开项目时,它似乎加载了所有OS X开发对象,我再也看不到像UITextViews等任何可可触摸项.
我没有手动更改任何设置,所以我不确定为什么会发生这种情况.
在我正在开发的应用程序(适用于 iOS13 及更高版本的 SwiftUI)中,我导入了自定义字体,并使用以下方法加载该字体”:
func getDigitalXFontOfSize(size s : CGFloat) -> Font {
return Font.custom("DigitalX", size: s);
}
Run Code Online (Sandbox Code Playgroud)
我在视图中有一个 Text 对象,如下所示:
let font : Font = FontGetter.getDigitalXFontOfSize(20.0);
var body: some View {
HStack {
Text("some text").font(FontGetter)
}
}
Run Code Online (Sandbox Code Playgroud)
在 iOS 中,有一些选项可以在“设置”中更改字体大小,并指出:“支持动态类型的应用程序将在下方调整为您喜欢的阅读大小”。据我所知,SwiftUI 中的 Text 视图会根据 Dynamic Type 值自动采用字体的动态缩放。
现在我明白可访问性非常重要,如果用户想要更大的字体,他们应该能够得到一个等等。我的应用程序是一个网络游戏的附加组件,需要一个非常具体的布局,不遵守非常大或非常小的文本(如 iOS 中可用的文本,例如accessibilityExtraExtraExtraLarge)
一些应用程序,如 iOS 版 Reddit 应用程序,似乎完全忽略了设置应用程序中设置的文本大小。
当您在“设置”应用中更改文本大小滑块时,我的应用中的文本大小也会发生变化,这是我不希望发生的。
我可以在我的应用程序中关闭动态类型支持并始终呈现我指定的确切大小的字体吗?如果是这样,怎么做?
我可以为我在应用程序中使用的特定文本视图禁用动态类型吗?
我花了很多时间在 SO 上搜索类似的问题,但似乎找不到适用于 iOS 13 及更高版本或 SwiftUI 的解决方案。以前版本的 iOS(或 swift)没有缩放以相同方式创建的自定义字体,但现在它们似乎可以。
编辑
在 iOS 14 中,有一个创建固定字体大小的选项,如下所示:
func getDigitalXFontOfSize(size s : CGFloat) -> …Run Code Online (Sandbox Code Playgroud) 我有一个UIViewController和一个类别,用于向UIViewController添加方法.该类别中有一种方法:
@implementation UIViewController (AlertAnimationsAndModalViews)
-(void)someAddedMethod
{
UIView *someView;
//do some animation with the view that lasts 3 seconds
//remove the view and return
}
Run Code Online (Sandbox Code Playgroud)
在任何视图控制器中我都可以调用此方法
[self someAddedMethod];
Run Code Online (Sandbox Code Playgroud)
但是,我只想让这个方法一次运行一个.例如,如果我一个接一个地打两个电话
[self someAddedMethod];//call1
[self someAddedMethod];//call2
Run Code Online (Sandbox Code Playgroud)
我希望第二个电话等到第一个电话完成.我知道UIView animationWithduration ...是在一个单独的线程中运行,并且看到我无法在类别中创建iVars我真的不能使用@synchronized(someObject)..
有什么建议?
提前致谢!
该方法如下所示:
-(void)showTopBannerWithHeight:(CGFloat)height andWidth:(CGFloat)width andMessage:(NSString *)message andDuration:(CGFloat)duration
{
UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -height, width, height)];
[self.view.superview addSubview:messageLabel];
[UIView animateWithDuration:0.5
delay:0
options: UIViewAnimationOptionBeginFromCurrentState
animations:^{
messageLabel.frame = CGRectMake(0, 0, SCREEN_WIDTH, height);
}
completion:^(BOOL finished){
[UIView animateWithDuration: 0.5
delay:duration
options: UIViewAnimationOptionBeginFromCurrentState
animations:^{
messageLabel.frame = …Run Code Online (Sandbox Code Playgroud) 我正在 Xcode 11.6 中的 iOS 13 上的 SwiftUI 中创建一个应用程序
我想在 SwiftUI 的视图上创建一个扩展,当用户长按视图时显示一条警报消息。
例如,假设我有这样的视图:
import SwiftUI
struct TestView: View {
var body: some View {
TabView {
Text("1").addLongPressAlert("Test 1")
Text("2").addLongPressAlert("Test 2")
Text("3").addLongPressAlert("Test 3")
}
}
}
Run Code Online (Sandbox Code Playgroud)
View 上的扩展看起来像这样:
extension View {
public func addLongPressAlert(message _ : String) -> some View {
return self.onLongPressGesture {
// I know this is not how you show an alert, but im unsure how to display it
Alert(title: Text("Alert"), message: Text(m), dismissButton: .default(Text("OK!")))
}
}
} …Run Code Online (Sandbox Code Playgroud) 基本上我想做的是从std输入中读取一个变量,并检查该变量是否为1或2。如果不是,我想通知用户并再次询问,我认为while循环是有意义的(我正在使用bash外壳中的OS X小牛)
对于单个条件,此方法有效:
read result
while [[ "$result" != "1" ]];
do
echo $result
echo "You must enter 1 or 2. Please try again: "
read result
done
echo "success"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行或条件时:
while [[ "$result" != "1" ]] || [[ "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)
如果我在终端输入1或2,这与输入1或2不匹配。
while [[ "$result" != "1" ] || [ "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)
产生语法错误。
while [[ "$result" != "1" || "$result" != "2" ]];
Run Code Online (Sandbox Code Playgroud)
这也不匹配1或2。有谁知道正确的语法?
ios ×3
swift ×2
swiftui ×2
alert ×1
animation ×1
bash ×1
ios13 ×1
ios14 ×1
macos ×1
objective-c ×1
sh ×1
shell ×1
synchronized ×1
while-loop ×1
xcode ×1