有没有办法在 SwiftUI 中获取子视图的大小?
我基本上希望做 UIKit 相当于:
self.child.frame.origin.x -= self.child.intrinsicContentSize.width/2.0
Run Code Online (Sandbox Code Playgroud)
我认为 GeometryReader 不会工作,因为它返回父级中的可用大小。
[编辑] 我发现可以使用.alignmentGuide(_, computeValue:)
虽然这绝对是一个黑客来获取和保存尺寸。
LessonSliderText(text: self.textForProgress(self.progress), color: self.completedColor)
.alignmentGuide(HorizontalAlignment.leading) { (dimensions) -> Length in
self.textSize = CGSize(width: dimensions.width, height: dimensions.height)
return 0
}
.offset(x: self.width*self.currentPercentage - self.textSize.width / 2.0)
.offset(y: -self.textSize.height/2.0)
.animation(nil)
.opacity(self.isDragging ? 1.0 : 0.0)
.animation(.basic())
Run Code Online (Sandbox Code Playgroud)
是否可以以GeometryReader
不只是填充父视图的方式使用?
作为一个具体的例子,我想使用.padding(.bottom, geometry.safeAreaInsets.bottom > 0 ? 0 : 12.0)
. 这将使用安全区域作为 iPhone X 上的边距和旧设备上的自定义边距。
没有GeometryReader
我的视图占用适合其实际垂直大小的空间。 对于阅读器,视图占据屏幕的 1/2。
VStack {
Spacer()
GeometryReader { proxy in // Lays out nicely without this...
HStack {
Text("Wrong")
Spacer()
}.border(Color.gray, width: 1)
}
Run Code Online (Sandbox Code Playgroud)
在iOS 7上使用此代码会导致分隔符视图被覆盖或缩短:
cell.accessoryType = UITableViewCellAccessoryCheckmark;
Run Code Online (Sandbox Code Playgroud)
如何修复分隔符视图?
我正在使用原型单元格,但我不是它们的子类.
[编辑]
以下是cellForRowAtIndexPath的相关代码:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
if (indexPath.section == kDefaultViewSection){
NSArray *defaultViewNames = @[LQSettingsSentenceView, LQSettingsFullTextView, LQSettingsFlashcardsView];
NSString *preferredViewName = [LQSettings valueForKey:LQSettingsPreferredLessonView];
if ([defaultViewNames[indexPath.row] isEqualToString:preferredViewName]){
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.section != kDefaultViewSection){
return;
}
// Just turn all checks off for a minute
for (int x=0; x<3; x++) {
NSIndexPath *ip = [NSIndexPath indexPathForRow:x inSection:kDefaultViewSection];
UITableViewCell …
Run Code Online (Sandbox Code Playgroud) 当我尝试在任何设备上运行时,我收到错误"无法分配资源".我已经看到这是一个可能的解决方案:
sudo rm -rf /var/db/lockdown/
Run Code Online (Sandbox Code Playgroud)
我试过了,并重启了我的机器几次,但没有运气.我也尝试过改变USB端口.在使用AppCleaner卸载后,我也重新安装了Xcode.
除了错误,每当我连接设备时,它都会问我"信任这台电脑吗?"
这种情况发生在带闪电的iPhone 5和iPhone 6+以及带旧式连接器的iPad 3上.
[更新]我现在也重新安装iTunes无效.同时重置PRAM和SMC.
我无法使用方法[MagicalRecord saveWithBlock:completion]来保存我的对象.当我切换到使用普通块时,它工作正常.使用2.2版开发.
下面的代码有效,我已经注释掉saveWithBlock:特定部分.executeBlock ...:方法只包装dispatch_async和executeBlockOnMainThread:替换completion:block.
[card.managedObjectContext MR_saveToPersistentStoreAndWait];
//[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { // Replace this...
[NSObject executeBlockInBackground:^{ // With this...
Card *localCard = [card MR_inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; // MR_inContext:localContext];
NSRange range = [localCard.fragment rangeOfString:localCard.term options:NSCaseInsensitiveSearch];
if (range.location == NSNotFound){
return;
}
NSString *fragmentString = [localCard.fragment stringByReplacingOccurrencesOfString:@" " withString:@"+"];
NSString *url = [NSString stringWithFormat:@"https://www.lingq.com/api/languages/%@/phrases/?word=%@&frag=%@&start=%@", appDelegate.currentLanguage, localCard.term, fragmentString, @(range.location)];
NSMutableURLRequest *request = [LQAPI requestForURL:url body:nil HTTPMethod:@"GET"];
NSData *response = [LQAPI executeURLRequest:request];
NSDictionary *responseDictionary = [LQAPI dictionaryFromJSONData:response];
if (responseDictionary == nil){
return;
}
NSArray *phrases = …
Run Code Online (Sandbox Code Playgroud) 我在https://github.com/FLCLjp/iPhone-libmecab上找到了用于MeCab的iPhone库.我无法将其标记为所有可能的单词.具体来说,我不能将"吉本兴业"分为两部分"吉本"和"兴业".我可以使用任何选项来解决这个问题吗?iPhone库没有暴露任何东西,但它在objective-c包装器下使用C++.我假设必须有某种设置我可以更改以提供更细粒度的控制,但我不知道从哪里开始.
顺便说一句,如果有人想要标记这可能是合适的'mecab'.我还不允许创建新标签.
更新:iOS库调用libmecab.cpp中定义的mecab_sparse_tonode2().如果有人能指出我在该文件上的一些英文文档,那就足够了.
我已经实现了FIRRemoteConfig并在firebase控制台中添加了我的第一个值.但是,当我尝试激活获取的值时,它失败并且我的远程值永远不可用.
let remote = FIRRemoteConfig.remoteConfig()
#if DEBUG
let expiration: TimeInterval = 0
remote.configSettings = FIRRemoteConfigSettings(developerModeEnabled: true)
#else
let expiration: TimeInterval = 24*60*60
#endif
var map = [String:NSObject]()
let defaults = RemoteSettings.defaults.keys
for key in defaults.keys {
map[key.rawValue] = defaults[key] as? NSObject
}
remote.setDefaults(map) // Have confirmed that map is valid here
remote.fetch(withExpirationDuration: expiration, completionHandler: { (status, error) in
// status always == .success, but remote.activateFetched() always returns false.
if status == .success && remote.activateFetched() {
print("applied remote settings")
} else …
Run Code Online (Sandbox Code Playgroud) 如果我跑:
for f in *1000.png
echo $f
end
Run Code Online (Sandbox Code Playgroud)
我明白了
1000.png
11000.png
21000.png
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
for i in 1 2 3
for f in *$i000.png
echo $f
end
end
Run Code Online (Sandbox Code Playgroud)
要得到
1000.png
11000.png
21000.png
2000.png
12000.png
22000.png
3000.png
13000.png
23000.png
Run Code Online (Sandbox Code Playgroud)
相反,它什么也没输出.
我也尝试过:
for i in 1 2
set name "*"$i"000.png"
for f in (ls $name)
echo $f
end
end
Run Code Online (Sandbox Code Playgroud)
输出:
ls: *1000.png: No such file or directory
ls: *2000.png: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我只是使用Xcode的重构工具将一个核心数据类重命名为Player to Person.修复了因使用Xcode在重命名时遗漏的点符号导致的大约100个错误后,我到了最后一个:
Player.m - 词法或预处理器问题 - 找不到'Person.h'
Player.m不再存在于项目中,并在错误中显示为已删除(空图标).显然,既然我摆脱了它,我不希望它再存在!
为了解决这个问题,我尝试重新添加Player.h和Player.m的旧副本,以及清理.我检查了Build Phases-> Compile Sources部分,Person.m在那里,Player.m不是.Person.h确实存在.
不确定它是否重要,但我使用mogenerator来生成我的核心数据类.此外,这是我的第三个xcdatamodel版本.版本1和2使用了Player.h.
以下是错误的屏幕截图:
在声明RLMArray时,第二组括号的重要性是什么?Realm是我见过这个唯一的地方.
@property NSArray<NSDictionary*> *dictionaries; // I understand this (and it's wonderful!)
@property NSDictionary<NSString*, NSArray<NSString*>*> *dictionaryOfArraysOfStrings; // No problem with this either
@property RLMArray<Object*><Object> *objects; // What is <Object> for?
Run Code Online (Sandbox Code Playgroud)