我正在使用PagerTabStrip来设置滑动标签.但是,当我设置三个选项卡时,它会显示中心的第一个选项卡,因此用户一眼就看不到所有三个选项卡.
我怎样才能将它们对齐到左边?

我想像这样向左移动标签.

我试过引力,但没有运气.
pagerTabStrip.setGravity(Gravity.LEFT);
Run Code Online (Sandbox Code Playgroud)
这是MainActivity的代码.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);
FragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(
getSupportFragmentManager());
viewPager.setAdapter(fragmentPagerAdapter);
pagerTabStrip.setGravity(Gravity.LEFT);
}
Run Code Online (Sandbox Code Playgroud)
和
MyFragmentPagerAdapter extends FragmentPagerAdapter {
private final String[] pageTitle = { "Entry", "History", "Report" };
public MyFragmentPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new PageFragment();
Bundle arguments = new Bundle();
arguments.putString("pageIndex", Integer.toString(position + 1));
fragment.setArguments(arguments);
return fragment;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我正在开发一个书籍应用程序,用户可以在TextView上更改字体大小.
当用户更改字体大小时,应用程序会保存当前文本位置,以便在用户更改字体大小后不更改该位置.
它在大多数情况下工作正常,但有时,当用户更改字体大小时,应用程序会出现此类错误,我仍然无法告诉如何解决此问题.
由于未捕获的异常'CALayerInvalidGeometry'终止应用程序,原因:'CALayer bounds包含NaN:[0 nan; 280 524]" *第一掷调用堆栈:(0x3231e3e7 0x3a019963 0x3231e307 0x33edb4d7 0x33edb30d 0x3419141f 0x3419b82f 0x342d1cf1 0x3414f80d 0xe7bf1 0xe607d 0xfad35 0x34218087 0x34218111 0x34218087 0x3421803b 0x34218015 0x342178cb 0x34217db9 0x341405f9 0x3412d8e1 0x3412d1ef 0x35e455f7 0x35e45227 0x322f33e7 0x322f338b 0x322f220f 0x3226523d 0x322650c9 0x35e4433b 0x341812b9 0xdf9f1 0xdf978)的libc ++ ABI. dylib:终止调用抛出异常
我也无法100%重现此问题,因为这个问题偶尔会发生.
这是代码.有人有想法解决这个问题吗?提前致谢.
- (UITextRange *)getCurrentTextRange:(UITextView *)textView {
CGRect bounds = textView.bounds;
UITextPosition *start = [textView characterRangeAtPoint:bounds.origin].start;
UITextPosition *end = [textView positionFromPosition:start offset:1];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
return textRange;
}
- (void)changeFontSize:(UIButton*)button {
UITextRange …Run Code Online (Sandbox Code Playgroud) 我想在UITextview上拦截长按,但不想同时禁用上下文菜单选项.
如果我在textview上使用手势识别器,它将禁用上下文菜单,所以我现在使用下面的方法.
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
//fire my method here
}
Run Code Online (Sandbox Code Playgroud)
但是,它只会在用户长按某些单词后显示上下文菜单时触发该方法.所以当用户长按空格时,只显示放大镜,我当时无法触发方法.
有没有人有更好的想法?谢谢!
//////解决了问题//////
感谢@danh和@Beppe,我甚至在UITextView上使用了点击手势.我想通过长按在textview上显示字体栏.
@First,我将UITextview子类化.
@interface LisgoTextView : UITextView {
BOOL pressing_;
}
@property (nonatomic) BOOL pressing;
@end
@interface LisgoTextView (private)
- (void)longPress:(UIEvent *)event;
@end
@implementation LisgoTextView
@synthesize pressing = pressing_;
//--------------------------------------------------------------//
#pragma mark -- Long Press Detection --
//--------------------------------------------------------------//
- (void)longPress:(UIEvent *)event {
if (pressing_) {
//post notification to show font edit bar
NSNotification *fontEditBarNotification = [NSNotification notificationWithName:@"fontEditBarNotification"
object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] postNotification:fontEditBarNotification];
}
}
- (void)touchesBegan:(NSSet *)touches …Run Code Online (Sandbox Code Playgroud) 我想从我的Iphone应用程序中的html中提取主要文章内容,并在TextView或CoreText上显示它.
稍后阅读并且InstaPaper Iphone应用程序具有此功能,但在网络上进行研究之后,我仍然不知道他们是如何做到这一点的.
目前,我通过此代码从html中获取文本内容,但它也需要很多不需要的内容.
textArticle = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"];
Run Code Online (Sandbox Code Playgroud)
这个问题是我想要的,但遗憾的是它不适用于Iphone应用程序.
类似Instapaper的算法
这是这种功能的开源,但我不确定我是否可以将它用于Iphone应用程序. https://github.com/jiminoc/goose/wiki
之前似乎更聪明地提供api,但它现在不可用. http://smartrmobi.blogspot.com/2011/02/smartr-api-withdrawn-until-further.html
也许,最简单的方法是从xml元素获取文章内容,但这只是我的猜测.
我想知道从哪里开始,所以我真的很感激任何建议.
谢谢
Apple 为订阅引入了宽限期。
https://developer.apple.com/app-store-connect/whats-new/?id=billinggraceperiod
我仍然不知道是否需要设置服务器端来支持此功能,或者只是检查服务器上的收据只是一种推荐的方式,我可以在没有服务器端的情况下使用 Grace Period?
例如,您可以在设备中查看收据,以便在没有服务器端的 iOS 上使用自动续订订阅,但是通过服务器查看收据是一种避免人渣的推荐方法。
宽限期说明说您需要检查收据和服务器通知,我想您只能在需要时检查设备上的收据,但不确定服务器通知部分。
任何帮助表示赞赏!
我的应用程序就像播放网络文章一样. http://lisgo.org/
我计划制作一个免费版本,如果有iPhone应用程序的音频广告,我很好奇.由于我的应用的大多数用户都看不到屏幕,因此横幅广告不适合.我想插入像spotify这样的音频广告.
我检查了http://www.medialets.com/和http://www.greystripe.com/,但他们的展示案例非常模糊.我发了电子邮件给他们,但还没有回复.
任何帮助将不胜感激.
谢谢!
我将下面显示的代码更改为ARC兼容.
我只是像Xcode建议的那样改变它,并且它在Xcode上没有显示错误.但是一旦事件发生,代码就会崩溃.有人有想法解决这个问题吗?
我不确定这种迷恋是否因为acapela SDK而发生.
这是非ARC代码,它工作正常.
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = *(AcapelaSpeech**)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
status = AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
status = AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
这是ARC兼容的,但它会破坏[anAcapelaSpeech setActive:NO] ;.
void MyInterruptionListener(void *inClientData, UInt32 inInterruptionState) {
AcapelaSpeech* anAcapelaSpeech = (__bridge_transfer AcapelaSpeech*)inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption) {
[anAcapelaSpeech setActive:NO];
AudioSessionSetActive(NO);
}
if (inInterruptionState == kAudioSessionEndInterruption) {
AudioSessionSetActive(YES);
[anAcapelaSpeech setActive:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
附加信息. 我正在使用Acapela音频SDK,音频中断代码显示在此PDF的中断. http://www.ecometrixem.com/cms-assets/documents/44729-919017.acapela-for-iphone.pdf
这是暗恋的截图.

已解决 此代码有效,谢谢.
void MyInterruptionListener(void *inClientData, …Run Code Online (Sandbox Code Playgroud) 我计划在 SaaS 应用程序上使用非续订订阅,因为苹果不允许 SaaS 自动续订。
Apple 还要求我们提供服务器端机制来跟踪多个设备的订阅。
但是,根据我的研究,如果注册是强制性的,苹果似乎也拒绝应用程序,因此必须将此类用户注册设为可选。
我的应用程序在开始时无需注册即可使用,因此此时注册是可选的。但是,如果用户想购买非续订订阅,则必须注册以跟踪订阅。
苹果会拒绝这种做法吗?
相关链接:
应用被拒绝。如何跟踪用户非续订订阅
*UPDATE
我查看了 WWDC2012 的会话视频,似乎可以要求用户在购买非续订订阅之前在您的服务器上注册。 一旦他们真的批准了这种方法,我会发布一个答案。

*更新
我通过调解中心收到了苹果的回复。
底线是我们应该允许用户在没有注册的情况下购买订阅。
这是苹果评测团队的回答。
将注册设为可选是合适的。您可以提供警告,说明用户将无法在未注册的情况下在多个设备上跟踪订阅。但是,您还应该提供在购买订阅后注册和跟踪订阅的选项。
当我用nil调用此方法时,应用程序崩溃,但我想知道如何使用nullable编写它.
CRASH
[KPTaxnoteApiSaveHandler saveEntryWithUuid:uuid completion:nil];
Run Code Online (Sandbox Code Playgroud)
好
[KPTaxnoteApiSaveHandler saveEntryWithUuid:uuid completion:^(NSError *error) {}];
Run Code Online (Sandbox Code Playgroud)
这是代码.
+ (void)saveEntryWithUuid:(NSString *)uuid completion:(void (^ __nullable)(NSError * _Nullable error))completion {
NSLog(@"saveEntryWithUuid");
Entry *entry = [Entry MR_findFirstByAttribute:@"uuid" withValue:uuid];
NSDictionary *params = @{@"entry[uuid]":entry.uuid};
[KPTaxnoteApiSaveHandler postWithUrl:kApiUrlStringForEntry params:params completion:^(NSError *error) {
if (!error) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Entry *entry = [Entry MR_findFirstByAttribute:@"uuid" withValue:uuid inContext:localContext];
entry.needSave = @NO;
}];
}
completion(error);
}];
+ (void)postWithUrl:(NSString *)urlStr params:(NSDictionary *)params completion:(nullable void (^)(NSError *_Nullable error))completion {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:urlStr parameters:params success:^(AFHTTPRequestOperation …Run Code Online (Sandbox Code Playgroud) 我在使用这个 gem 的密码重置功能时遇到问题。 https://github.com/lynndylanhurley/devise_token_auth
这是来自文档。
/password/edit GET
Run Code Online (Sandbox Code Playgroud)
“通过密码重置令牌验证用户。此路由是密码重置确认的目标URL。此路由必须包含reset_password_token和redirect_url参数。这些值将由密码重置请求生成的确认电子邮件自动设置。”
当用户忘记密码时,可以输入注册邮箱,他们将通过电子邮件收到密码重置链接。
发布: https: //example.com/api/auth/password
params = 电子邮件和重定向链接 ( https://example.com/api/auth/password/edit )
我可以通过电子邮件发送密码重置链接,但是当我单击该链接或电子邮件中的“更改我的密码”时,它会跳转到带有令牌的重定向地址。
它显示“您正在查找的页面不存在”。
这可能是路线错误或其他什么,但我不知道。我什至不确定是否应该为重定向链接设置“/password/edit”。
这是 github 的相关链接 https://github.com/lynndylanhurley/devise_token_auth/issues/604
我是否遗漏了某些内容,或者我应该为重定向链接部分设置不同的地址?
我想使用Javascript在UIWebview上添加填充,因为我在全屏和导航栏模式之间切换视图,导航栏隐藏了原始页面的顶部.
这是代码.它适用于某些页面,但在某些页面上不起作用.有没有人想让它在所有页面上都有效?
- (void)webViewDidFinishLoad:(UIWebView*)webView {
//make padding on the top and the bottom of webview
NSString *padding = @"document.body.style.padding='64px 0px 44px 0px';";
[webView_ stringByEvaluatingJavaScriptFromString:padding];
}
Run Code Online (Sandbox Code Playgroud)
它在这个页面上工作正常.(左图)http://pandodaily.com/2012/03/23/jessica-albas-the-honest-company-raises-27-million-for-non-toxic-baby-products/

我正在构建一个带有 Rails 后端的 iOS 应用程序。
对于身份验证,我使用名为 devise_token_auth 的 rails gem。 https://github.com/lynndylanhurley/devise_token_auth
注册或登录后,我将访问令牌、客户端 ID 和电子邮件存储在 iOS 钥匙串中。
但是,出于安全考虑,令牌应在 2 周后过期,因此 iOS 用户应每 2 周重新登录一次。
我想,在这种情况下您可以使用 refresh-token,但不幸的是我无法从 devise_token_auth gem 中找到 refresh-token。
那么,在这种情况下,是否可以将用户密码存储在 iOS 钥匙串中以在令牌过期时自动重新登录,或者将密码存储在钥匙串中是应该避免的坏主意?
如果将密码存储在钥匙串中以避免从移动应用程序每两周登录一次不是一个好习惯,是否有任何建议可以使用刷新令牌?
我想知道我是否可以将刷新令牌与这个 jwt gem 一起使用。 https://github.com/nsarno/knock
我一直在开发一个支持 Xcode 8.2 和 iOS8~ 的 objc 项目。
我通过 Carthage 安装了一个 swift 库(https://github.com/danielgindi/Charts),但是如果我调用该库的任何方法,应用程序就会崩溃,并出现“无法识别的选择器发送到实例”错误。
我可以通过 Cocoapods 使其工作,但是当我将 Swift 库与 Cocoapods 一起使用时,构建时间会非常慢,所以如果可能的话我想使用 Carthage。
有没有办法通过 Carthage 在 objc 项目中使用 swift 库?
基本上,我根据页面通过 Carthage 安装了 Charts 库。 https://github.com/Carthage/Carthage/blob/master/README.md
我只使用嵌入式二进制文件来添加 Charts.framework 而不是链接框架,因为它解决了启动时的崩溃问题。